打板子机器启动!
快读
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n;
int ans;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int main(){
n=read();
printf("%d",ans);
return 0;
}
快读快输
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n;
int ans;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
void write(int x){
if(x<0)x=-x,putchar('-');
if(x>9)write(x/10);
putchar(x%10+'0');
return;
}
int main(){
n=read();
printf("%d",ans);
//write(n);
return 0;
}
P1226 【模板】快速幂
#include<bits/stdc++.h>
using namespace std;
int a,b,p;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int qpower(int x,int y){
int ans=1;
while(y){
if(y&1)ans=1ll*ans*x%p;
x=1ll*x*x%p;
y>>=1;
}
return ans;
}
int main(){
a=read();b=read();p=read();
printf("%d^%d mod %d=%d",a,b,p,qpower(a,b));
return 0;
}
P3383 【模板】线性筛素数
#include<bits/stdc++.h>
using namespace std;
const int N=100000005,M=5770000;
int n,q;
int a[M],cnt;
bool pri[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
void prime(){
for(int i(2);i<=n;++i){
if(!pri[i])a[++cnt]=i;
for(int j(1);j<=cnt&&1ll*i*a[j]<=n;++j){
pri[i*a[j]]=1;
if(i%a[j]==0)break;
}
}
return;
}
int main(){
n=read();q=read();
prime();//cout<<cnt<<'\n';
while(q--)printf("%d\n",a[read()]);
return 0;
}
P10815 【模板】快速读入
#include<bits/stdc++.h>
using namespace std;
int n,ans;
int read(){
int ff=1,kk=0;
char cc=getchar_unlocked();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar_unlocked();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar_unlocked();
}
return ff*kk;
}
int main(){
n=read();
while(n--)ans+=read();
printf("%d",ans);
return 0;
}
注意 getchar_unlocked()
只能在 Linux 上使用,在 Windows 环境下会 CE。
P3370 【模板】字符串哈希
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n;
unordered_map<string,bool> mp;
int ans;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int main(){
n=read();
while(n--){
string str;
cin>>str;
if(mp[str]==0)++ans,mp[str]=1;
//cout<<str<<" "<<ans<<'\n';
}
printf("%d",ans);
return 0;
}
注意:unordered_map
,unordered_set
,tuple
,array
。
B3647 【模板】Floyd
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,m;
int dis[N][N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int main(){
n=read();m=read();
memset(dis,0x3f,sizeof dis);
for(int i(1);i<=n;++i)dis[i][i]=0;
while(m--){
int u=read(),v=read(),w=read();
dis[u][v]=min(dis[u][v],w);
dis[v][u]=min(dis[v][u],w);
}
for(int k(1);k<=n;++k)
for(int i(1);i<=n;++i)
for(int j(1);j<=n;++j)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
for(int i(1);i<=n;++i){
for(int j(1);j<=n;++j)
printf("%d ",dis[i][j]);
puts("");
}
return 0;
}
B3644 【模板】拓扑排序 / 家谱树
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n;
vector<int> g[N];
int f[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
queue<int> q;
int main(){
n=read();
for(int i(1);i<=n;++i){
int j=read();
while(j){
g[i].push_back(j);
++f[j];
j=read();
}
}
for(int i(1);i<=n;++i)if(!f[i])q.push(i);
while(q.size()){
int x=q.front();
q.pop();
printf("%d ",x);
for(int v:g[x]){
--f[v];
if(!f[v])q.push(v);
}
}
return 0;
}
P1886 滑动窗口 /【模板】单调队列
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n,k,a[N];
int h[N],l,r;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
void min_que(){
l=1;r=0;
for(int i(1);i<=n;++i){
while(l<=r&&h[l]+k<=i)++l;
while(l<=r&&a[h[r]]>=a[i])--r;
h[++r]=i;
if(i>=k)printf("%d ",a[h[l]]);
}
puts("");
return;
}
void max_que(){
l=1;r=0;
for(int i(1);i<=n;++i){
while(l<=r&&h[l]+k<=i)++l;
while(l<=r&&a[h[r]]<=a[i])--r;
h[++r]=i;
if(i>=k)printf("%d ",a[h[l]]);
}
return;
}
int main(){
n=read();k=read();
for(int i(1);i<=n;++i)a[i]=read();
min_que();
max_que();
return 0;
}
P3811 【模板】模意义下的乘法逆元
#include<bits/stdc++.h>
using namespace std;
const int N=3000005;
int n,p;
int inv[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int main(){
n=read(),p=read();
inv[1]=1;puts("1");
for(int i(2);i<=n;++i){
inv[i]=1ll*(p-p/i)*inv[p%i]%p;
printf("%d\n",inv[i]);
}
return 0;
}
注意: 互质才有逆元,4 种求逆元方式。
P4549 【模板】裴蜀定理
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n;
int ans;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int gcd(int x,int y){
if(!y)return x;
return gcd(y,x%y);
}
int main(){
n=read();ans=read();
for(int i(2);i<=n;++i)ans=gcd(ans,read());
if(ans>=0)printf("%d",ans);
else printf("%d",-ans);
return 0;
}
P5788 【模板】单调栈
#include<bits/stdc++.h>
using namespace std;
const int N=3000005;
int n,a[N];
int s[N],tp;
int res[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int main(){
n=read();
for(int i(1);i<=n;++i)a[i]=read();
for(int i(n);i;--i){
while(tp&&a[s[tp]]<=a[i])--tp;
res[i]=s[tp];
s[++tp]=i;
}
for(int i(1);i<=n;++i)printf("%d ",res[i]);
return 0;
}
P1883 【模板】三分 | 函数
#include<bits/stdc++.h>
using namespace std;
const int N=10005;
const double eps=1e-10;
int T,n;
int a[N],b[N],c[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
double check(double x){
double ans=a[1]*x*x+b[1]*x+c[1];
for(int i(2);i<=n;++i)ans=max(ans,a[i]*x*x+b[i]*x+c[i]);
return ans;
}
int main(){
T=read();
while(T--){
n=read();
for(int i(1);i<=n;++i)a[i]=read(),b[i]=read(),c[i]=read();
double l=0,r=1000;
while(l+eps<r){
//cout<<l<<" "<<r<<'\n';
double mid1=l+(r-l)/3.0,mid2=r-(r-l)/3.0;
if(check(mid1)>check(mid2))l=mid1;
else r=mid2;
}
printf("%.4f\n",check(l));
}
return 0;
}
注意:数据类型,数组大小。
B3611 【模板】传递闭包
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,a[N][N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int main(){
n=read();
for(int i(1);i<=n;++i)
for(int j(1);j<=n;++j)a[i][j]=read();
for(int k(1);k<=n;++k)
for(int i(1);i<=n;++i)
for(int j(1);j<=n;++j)a[i][j]|=a[i][k]&a[k][j];
for(int i(1);i<=n;++i){
for(int j(1);j<=n;++j)printf("%d ",a[i][j]);
puts("");
}
return 0;
}
P8306 【模板】字典树
#include<bits/stdc++.h>
using namespace std;
const int N=3000005,M=65;
int T,n,q;
char c[N];
int len;
int a[N][M],num[N],cnt;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
void dfs(int x){
num[x]=0;
for(int i(0);i<62;++i)if(a[x][i]){
dfs(a[x][i]);
a[x][i]=0;
}
return;
}
void cl(){
cnt=0;
dfs(0);
return;
}
void build(){
int qwq,nw=0;
for(int i(0);i<len;++i){
if(c[i]>='a'&&c[i]<='z')qwq=c[i]-'a';
else if(c[i]>='A'&&c[i]<='Z')qwq=c[i]-'A'+26;
else qwq=c[i]-'0'+52;
if(!a[nw][qwq])a[nw][qwq]=++cnt;
nw=a[nw][qwq];
++num[nw];
}
return;
}
int find(){
int qwq,nw=0;
for(int i(0);i<len;++i){
if(c[i]>='a'&&c[i]<='z')qwq=c[i]-'a';
else if(c[i]>='A'&&c[i]<='Z')qwq=c[i]-'A'+26;
else qwq=c[i]-'0'+52;
if(!a[nw][qwq])return 0;
nw=a[nw][qwq];
}
return num[nw];
}
int main(){
T=read();
while(T--){
cl();
n=read();q=read();
for(int i(1);i<=n;++i){
scanf(" %s",c);
len=strlen(c);
build();
}
while(q--){
scanf(" %s",c);
len=strlen(c);
printf("%d\n",find());
}
}
return 0;
}
P3367 【模板】并查集
#include<bits/stdc++.h>
using namespace std;
const int N=10005;
int n,m,fa[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
int main(){
n=read();m=read();
for(int i(1);i<=n;++i)fa[i]=i;
while(m--){
int z=read(),x=read(),y=read();
if(z==1)fa[find(x)]=find(y);
else{
if(find(x)==find(y))puts("Y");
else puts("N");
}
}
return 0;
}
P3374 【模板】树状数组 1
#include<bits/stdc++.h>
using namespace std;
const int N=500005;
int n,m;
int c[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int lowbit(int i){
return i&(-i);
}
void add(int x,int i){
for(;i<=n;i+=lowbit(i))c[i]+=x;
return;
}
int find(int i){
int ans=0;
for(;i;i-=lowbit(i))ans+=c[i];
return ans;
}
int main(){
n=read();m=read();
for(int i(1);i<=n;++i)add(read(),i);
while(m--){
int op=read(),x=read(),y=read();
if(op==1)add(y,x);
else printf("%d\n",find(y)-find(x-1));
}
return 0;
}
P3371 【模板】单源最短路径(弱化版)
#include<bits/stdc++.h>
using namespace std;
const int N=10005;
int n,m,s;
vector<pair<int,int> > g[N];
bool vis[N];
unsigned int dis[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
queue<int> q;
int main(){
//2147483647
//cout<<0x7f7f7f7f;
n=read();m=read();s=read();
while(m--){
int u=read(),v=read(),w=read();
g[u].emplace_back(make_pair(v,w));
}
for(int i(1);i<=n;++i)dis[i]=2147483647;
dis[s]=0;
vis[s]=1;
q.push(s);
while(q.size()){
int x=q.front();q.pop();
vis[x]=0;
for(pair<int,int> v:g[x])if(dis[v.first]>dis[x]+v.second){
dis[v.first]=dis[x]+v.second;
if(!vis[v.first]){
vis[v.first]=1;
q.push(v.first);
}
}
}
for(int i(1);i<=n;++i)printf("%d ",dis[i]);
return 0;
}
P3368 【模板】树状数组 2
#include<bits/stdc++.h>
using namespace std;
const int N=500005;
int n,m;
int c[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int lowbit(int i){
return i&(-i);
}
void add(int x,int i){
for(;i<=n;i+=lowbit(i))c[i]+=x;
return;
}
int find(int i){
int ans=0;
for(;i;i-=lowbit(i))ans+=c[i];
return ans;
}
int main(){
n=read();m=read();
int lst=0,nw;
for(int i(1);i<=n;++i){
nw=read();
add(nw-lst,i);
lst=nw;
}
while(m--){
int op=read(),x=read();
if(op==1){
int y=read(),k=read();
add(k,x);add(-k,y+1);
}
else printf("%d\n",find(x));
}
return 0;
}
P3379 【模板】最近公共祖先(LCA) tarjan
#include<bits/stdc++.h>
using namespace std;
const int N=500005;
int n,m,s;
vector<int> g[N];
vector<pair<int,int> > ques[N];
int ans[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
bool vis[N];
int fa[N];
int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
void tarjan(int x){
vis[x]=1;
for(int v:g[x])if(!vis[v]){
tarjan(v);
fa[v]=x;
}
for(pair<int,int> v:ques[x])if(vis[v.first])
ans[v.second]=find(v.first);
return;
}
int main(){
n=read();m=read();s=read();
for(int i(1);i<n;++i){
int x=read(),y=read();
g[x].emplace_back(y);
g[y].emplace_back(x);
}
for(int i(1);i<=m;++i){
int x=read(),y=read();
ques[x].emplace_back(make_pair(y,i));
ques[y].emplace_back(make_pair(x,i));
}
for(int i(1);i<=n;++i)fa[i]=i;
tarjan(s);
for(int i(1);i<=m;++i)printf("%d\n",ans[i]);
return 0;
}
P3379 【模板】最近公共祖先(LCA) 倍增
#include<bits/stdc++.h>
using namespace std;
const int N=500005,M=20;
int n,m,s;
vector<int> g[N];
int fa[N][M],dep[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
void dfs(int x){
for(int i(1);i<=18;++i)fa[x][i]=fa[fa[x][i-1]][i-1];
for(int v:g[x])if(v!=s&&!fa[v][0]){
fa[v][0]=x;
dep[v]=dep[x]+1;
dfs(v);
}
return;
}
int find(int x,int y){
if(dep[x]<dep[y])swap(x,y);
if(dep[x]>dep[y])
for(int i(18);i>=0;--i)
if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
if(x==y)return x;
for(int i(18);i>=0;--i)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
return fa[x][0];
}
int main(){
//cout<<log2(N);18...
n=read();m=read();s=read();
for(int i(1);i<n;++i){
int x=read(),y=read();
g[x].emplace_back(y);
g[y].emplace_back(x);
}
dep[s]=1;
dfs(s);
for(int i(1);i<=m;++i)printf("%d\n",find(read(),read()));
return 0;
}
P3366 【模板】最小生成树
#include<bits/stdc++.h>
using namespace std;
const int N=5005,M=200005;
int n,m;
int fa[N];
tuple<int,int,int> t[M];
int ans,cnt;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
int main(){
n=read();m=read();
for(int i(1);i<=n;++i)fa[i]=i;
for(int i(1);i<=m;++i)t[i]=make_tuple(read(),read(),read());
sort(t+1,t+1+m);
for(int i(1);i<=m;++i){
int x=get<1>(t[i]),y=get<2>(t[i]);
if(find(x)==find(y))continue;
fa[fa[x]]=fa[y];
ans+=get<0>(t[i]);++cnt;
}
if(cnt<n-1)puts("orz");
else printf("%d",ans);
return 0;
}
P3385 【模板】负环
#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int T,n,m;
vector<pair<int,int> > g[N];
long long dis[N];
int ti[N];
bool vis[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
queue<int> q;
bool spfa(){
while(q.size())q.pop();
memset(ti,0,sizeof ti);
memset(vis,0,sizeof vis);
memset(dis,0x3f,sizeof dis);
dis[1]=0;vis[1]=1;ti[1]=1;
q.push(1);
while(q.size()){
int x=q.front();q.pop();
vis[x]=0;
for(pair<int,int> v:g[x])if(dis[v.first]>dis[x]+v.second){
dis[v.first]=dis[x]+v.second;
++ti[v.first];
if(ti[v.first]>n)return 1;
if(!vis[v.first]){
vis[v.first]=1;
q.push(v.first);
}
}
}
return 0;
}
int main(){
T=read();
while(T--){
n=read(),m=read();
while(m--){
int u=read(),v=read(),w=read();
g[u].push_back({v,w});
if(w>=0)g[v].push_back({u,w});
}
if(spfa())puts("YES");
else puts("NO");
for(int i(1);i<=n;++i)g[i].clear();
}
return 0;
}
注意:审题,初始化。
P3865 【模板】ST 表 && RMQ 问题
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m,st[N][20];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int find(int l,int r){
int qwq=(int)(log(r-l+1)/log(2));
return max(st[l][qwq],st[r-(1<<qwq)+1][qwq]);
}
int main(){
//cout<<log2(N);16....
n=read();m=read();
for(int i(1);i<=n;++i)st[i][0]=read();
for(int j(1);(1<<j)<=n;++j)
for(int i(1);i+(1<<j)-1<=n;++i)
st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]);
while(m--){
int l=read(),r=read();
printf("%d\n",find(l,r));
}
return 0;
}
P4779 【模板】单源最短路径(标准版)
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m,s;
vector<pair<int,int> > g[N];
bool vis[N];
int dis[N];
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
priority_queue<pair<int,int> > pq;
void dij(){
memset(dis,0x3f,sizeof dis);
dis[s]=0;pq.push({0,s});
while(pq.size()){
int x=pq.top().second;pq.pop();
if(vis[x])continue;
vis[x]=1;
for(pair<int,int> v:g[x])if(dis[v.first]>dis[x]+v.second){
dis[v.first]=dis[x]+v.second;
pq.push({-dis[v.first],v.first});
}
}
return;
}
int main(){
n=read();m=read();s=read();
while(m--){
int u=read(),v=read(),w=read();
g[u].push_back({v,w});
}
dij();
for(int i(1);i<=n;++i)printf("%d ",dis[i]);
return 0;
}
P5431 【模板】模意义下的乘法逆元 2
#include<bits/stdc++.h>
using namespace std;
const int N=5000005;
int n,k,p;
int a[N],qz[N],hz[N],ans;
int read(){
int ff=1,kk=0;
char cc=getchar();
while(cc>'9'||cc<'0'){
if(cc=='-')ff=-1;
cc=getchar();
}
while(cc<='9'&&cc>='0'){
kk=kk*10+cc-'0';
cc=getchar();
}
return ff*kk;
}
int qp(int x,int y){
int ans=1;
while(y){
if(y&1)ans=1ll*ans*x%p;
x=1ll*x*x%p;
y>>=1;
}
return ans;
}
int main(){
n=read();p=read();k=read();
qz[0]=1;hz[n+1]=1;
for(int i(1);i<=n;++i){
a[i]=read();
qz[i]=1ll*qz[i-1]*a[i]%p;
}
for(int i(n);i;--i)hz[i]=1ll*hz[i+1]*a[i]%p;
int kk=1;
for(int i(1);i<=n;++i){
kk=1ll*kk*k%p;
ans=(ans+1ll*hz[i+1]*qz[i-1]%p*kk%p)%p;
}
printf("%d",1ll*ans*qp(qz[n],p-2)%p);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具