此处用于存放本喵的模板,不定时更新。(不过可能会咕咕咕qwq)
由于本喵很菜,没学到的算法这里自然也没有模板啦~
输入输出优化

inline int read(){ int X=0,w=0;char ch=0; while(!isdigit(ch)){w|=ch=='-';ch=getchar();} while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X; }

inline double dbread() { double X=0,Y=1.0; int w=0; char ch=0; while(!isdigit(ch)) {w|=ch=='-';ch=getchar();} while(isdigit(ch)) X=X*10+(ch^48),ch=getchar(); ch=getchar();//读入小数点 while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar(); return w?-X:X; }

inline void write(int x) { if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); }
图论
图的存储

inline void add(int u,int v,int w){ e[++cnt].to=v;e[cnt].w=w;e[cnt].nxt=head[u];head[u]=cnt; }
最小生成树

#include<bits/stdc++.h> using namespace std; struct node{ int u,v,w; }e[200001]; int fa[5001],n,m,ans,cnt; bool cmp(node a,node b){ return a.w<b.w; } int find(int x) { if(fa[x]==x) return x; return fa[x]=find(fa[x]); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { e[i].u=read(),e[i].v=read(),e[i].w=read(); } sort(e+1,e+m+1,cmp); for(int i=1;i<=m;i++) { if(find(e[i].u)==find(e[i].v)) continue; ans+=e[i].w; fa[find(e[i].v)]=find(e[i].u); if(cnt==n-2) { cnt++; break; } } printf("%d",ans); return 0; }
最短路
多源最短路

for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
单源最短路

void spfa(int s) { for(int i=1;i<=n;i++) dis[i]=inf; q.push(s); dis[s]=0;vis[s]=1; while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i;i=e[i].nxt) { int v=e[i].to; if(dis[v]>dis[u]+e[i].w) { dis[v]=dis[u]+e[i].w; if(!vis[v]) { vis[v]=1; q.push(v); } } } } }

priority_queue<pii,vector<pii>,greater<pii> >q; void dij(int s) { dis[s]=0; q.push(pii(0,s)); while(!q.empty()) { int u=q.top().se,f=q.top().fi; q.pop(); if(f!=dis[u])continue; for(int i=head[u];i;i=e[i].nxt) { int v=e[i].to,w=e[i].w; if(dis[v]>dis[u]+w) { dis[v]=dis[u]+w; q.push(pii(dis[v],v)); } } } return; }
数论

bool he[10000005]={0}; void Eratosthenes(int n) { for(int i=2;i<=n;i++) { if(he[i])continue; for(int j=2;j*i<=n;j++)he[j*i]=1; } }

#include<bits/stdc++.h> using namespace std; bool prime1[100000001]; int prime[100000001],n,m,k; void work(int n) { memset(prime1,true,sizeof(prime1)); prime[0]=0; for(int i=2;i<=n;i++) { if(prime1[i])prime[++prime[0]]=i; for(int j=1;j<=prime[0] && i*prime[j]<=n;j++) { prime1[i*prime[j]]=false; if(i%prime[j]==0) break; } } } int main() { cin>>n>>m; work(n); for(int i=1;i<=m;i++) { scanf("%d",&k); printf("%d ",prime[k]); } return 0; }





#include<bits/stdc++.h> #define ll long long #define G() cr=getchar() using namespace std; ll M,x,y,n; ll ans,a[110000],b[110000]; ll xr;char cr; inline ll read() { xr=0;G(); while(cr<'0'||cr>'9')G(); while(cr>='0'&&cr<='9')xr=(xr<<1)+(xr<<3)+cr-48,G(); return xr; } ll mul(ll a,ll b,ll c){ ll res=0; while(b>0) { if(b&1) res=((res+a))%c; a=(a+a)%c; b>>=1; } return (res%c+c)%c; } ll exgcd(ll p,ll q,ll &x,ll &y) { if(!q) { x=1; y=0; return p; } ll g=exgcd(q,p%q,y,x); y-=(p/q)*x; return g; } ll excrt() { M=b[1]; ans=a[1]; for(ll i=2;i<=n;i++) { ll c=((a[i]-ans)%b[i]+b[i])%b[i]; ll g=exgcd(M,b[i],x,y); ll p=b[i]/g; x=mul(x,c/g,p); ans+=x*M; M*=p; ans=(ans%M+M)%M; } return ans; } int main() { n=read(); for(ll i=1;i<=n;i++) { b[i]=read();a[i]=read(); } printf("%lld",excrt()); return 0; }
快速幂

long long qpow(long long k,long long n,long long p) { if(n==0) return 1%p; long long ans=1; while(n) { if(n&1==1) ans=ans*k%p; k*=k;k%=p;n>>=1; } return ans; }
数据结构

#include<cstdio> #include<cmath> #include<algorithm> using namespace std; int f[1000001][21],m,n; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&f[i][0]); for(int j=1;j<=21;j++) { for(int i=1;i+(1<<j)-1<=n;i++) { f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); } } for(int i=1;i<=m;i++) { int l,r; scanf("%d%d",&l,&r); int k=log2(r-l+1); printf("%d ",max(f[l][k],f[r-(1<<k)+1][k])); } return 0; }

#include<bits/stdc++.h>//包含区间和查询及单点加 using namespace std; int m,n; int tr[500001]; int lowbit(int x) {return x & -x;} void add(int p,int k) { while(p <= n) { tr[p] += k; p += lowbit(p); } } int query(int x) { int ans = 0; while(x) { ans += tr[x]; x -= lowbit(x); } return ans; } int main() { scanf("%d%d",&n,&m); for(int i = 1;i <= n;i ++) { int a; scanf("%d",&a); add(i,a); } for(int i = 1;i <= m;i ++) { int a,x,y; scanf("%d",&a); scanf("%d%d",&x,&y); if(a == 1) add(x,y); if(a == 2) cout<<query(y)-query(x-1)<<endl; } return 0; }

#include<bits/stdc++.h>//区间加,区间乘,区间和查询 using namespace std; long long tr[400001]; long long n,a[100001],lz1[400001],lz2[400001],m,p1; void build(long long p,long long l,long long r){ lz1[p]=1; if(l==r) { tr[p]=a[l]; return; } long long mid=(l+r)/2; build(p*2,l,mid); build(p*2+1,mid+1,r); tr[p]=tr[p*2]+tr[p*2+1]; } void push_down(int p,int l,int r){ long long mid=(l+r)/2; if(lz1[p]!=1) { (lz1[p*2]*=lz1[p]%p1)%=p1; (lz1[p*2+1]*=lz1[p]%p1)%=p1; (lz2[p*2]*=lz1[p])%=p1; (lz2[p*2+1]*=lz1[p])%=p1; (tr[p*2]*=(lz1[p])%p1)%=p1; (tr[p*2+1]*=(lz1[p])%p1)%=p1; lz1[p]=1; } if(lz2[p]>0) { (lz2[p*2]+=lz2[p]%p1)%=p1; (lz2[p*2+1]+=lz2[p]%p1)%=p1; (tr[p*2]+=(lz2[p]*(mid-l+1))%p1)%=p1; (tr[p*2+1]+=(lz2[p]*(r-(mid+1)+1))%p1)%=p1; lz2[p]=0; } } void modify1(long long p,long long l,long long r,long long ml,long long mr,long long x){ if(l==ml&&r==mr) { (tr[p]*=x%p1)%=p1; (lz1[p]*=x%p1)%=p1; (lz2[p]*=x%p1)%=p1; return; } long long mid=(l+r)/2; push_down(p,l,r); if(mr<=mid) modify1(p*2,l,mid,ml,mr,x); else if(ml>=mid+1) modify1(p*2+1,mid+1,r,ml,mr,x); else { modify1(p*2,l,mid,ml,mid,x); modify1(p*2+1,mid+1,r,mid+1,mr,x); } tr[p]=(tr[p*2]+tr[p*2+1])%p1; } void modify2(long long p,long long l,long long r,long long ml,long long mr,long long x){ if(l==ml&&r==mr) { tr[p]+=(x*(r-l+1))%p1; lz2[p]+=x; return; } long long mid=(l+r)/2; push_down(p,l,r); if(mr<=mid) modify2(p*2,l,mid,ml,mr,x); else if(ml>=mid+1) modify2(p*2+1,mid+1,r,ml,mr,x); else { modify2(p*2,l,mid,ml,mid,x); modify2(p*2+1,mid+1,r,mid+1,mr,x); } tr[p]=(tr[p*2]+tr[p*2+1])%p1; } long long query(long long p,long long l,long long r,long long ql,long long qr){ if(l==ql&&qr==r) return tr[p]; long long mid=(l+r)/2; push_down(p,l,r); if(qr<=mid){ return query(p*2,l,mid,ql,qr); } if(ql>=mid+1){ return query(p*2+1,mid+1,r,ql,qr); } else return (query(p*2,l,mid,ql,mid)+query(p*2+1,mid+1,r,mid+1,qr))%p1; } int main(){ cin>>n>>m>>p1; for(long long i=1;i<=n;i++) { cin>>a[i]; } build(1,1,n); for(long long i=1,u,x,ql,qr;i<=m;i++) { cin>>u; if(u==1) cin>>ql>>qr>>x,modify1(1,1,n,ql,qr,x); else if(u==2) cin>>ql>>qr>>x,modify2(1,1,n,ql,qr,x); else cin>>ql>>qr,cout<<(query(1,1,n,ql,qr))%p1<<endl; } return 0; }
字符串

#include<bits/stdc++.h> using namespace std; char a[1000005],b[1000005]; int nxt[1000005],n,m,j; int main() { scanf("%s%s",a+1,b+1); n=strlen(a+1),m=strlen(b+1); for(int i=2;i<=m;i++) { while(j&&b[j+1]!=b[i]) j=nxt[j]; if(b[j+1]==b[i]) j++; nxt[i]=j; } j=0; for(int i=1;i<=n;i++) { while(j&&b[j+1]!=a[i]) j=nxt[j]; if(b[j+1]==a[i]) j++; if(j==m) cout<<i-m+1<<endl; } for(int i=1;i<=m;i++) { cout<<nxt[i]<<" "; } return 0; }

#include<bits/stdc++.h> #define G() cr=getchar() using namespace std; char s[25000005]; char cr; int n,cnt=1; int p[25000005]; inline void read() { G(); while(cr<'a'||cr>'z') G(); while(cr>='a'&&cr<='z') s[++cnt]=cr,s[++cnt]='#',G(); } int r,c,maxn; int main() { s[0]='~',s[1]='#'; read(); for(int i=1;i<=cnt;i++) { if(i<=r) p[i]=min(p[2*c-i],r-i+1); while(s[i-p[i]]==s[i+p[i]]) p[i]++; if(i+p[i]>r) r=p[i]+i-1,c=i; maxn=max(maxn,p[i]); } cout<<maxn-1<<endl; return 0; }
先存一下,还没弄完qwq
发现什么问题记得告诉窝一下,窝会尽快修复qwq