秒
来源:互联网 发布:男人歌网络歌手试听 编辑:程序博客网 时间:2024/04/29 12:54
宏定义(下面部分用旧版本):
#define rep(i,l,r) for(int i=(l),_=(r);i<=_;i++)#define per(i,r,l) for(int i=(r),_=(l);i>=_;i--)#define MS(arr,x) memset(arr,x,sizeof(arr))#define INE(i,u) for(int i=head[u];~i;i=e[i].next)#define LL long long
01背包:25s
for(int i=1;i<=n;i++)for(int j=0;j<=v;j++){ opt[i][j]=opt[i-1][j]; if(j-v[i]>0) opt[i][j]=max(opt[i-1][j],opt[i-1][j-c[i]]+w[i]);}
for(int i=1;i<=n;i++)for(int j=v;j>=0;j--) if(j-c[i]>=0) opt[j]=max(opt[j],opt[j-c[i]]+w[i]);
完全背包:15s
rep(i,1,n) rep(j,w[i],m) opt[j]=max(opt[j],opt[j-w[i]]+q[i]);
LIS:40s
下降:两个>改成< 不降:两个>改成>=
for(int i=1;i<=n;i++){ if(a[i]>b[cnt]) b[++cnt]=a[i]; else { l=0,r=cnt; while(l<r) { mid=(l+r)>>1; if(a[i]>b[mid]) l=mid+1; else r=mid; } b[l]=a[i]; }}
归并&逆序对:60s
void merge_sort(int l,int r){ if(l>=r)return; int mid=(l+r)>>1; int p=l,q=mid+1,i=l; merge_sort(l,mid); merge_sort(mid+1,r); while(p<=mid||q<=r) { if(q>r||(p<=mid&&a[p]<a[q])) t[i++]=a[p++]; else { t[i++]=a[q++]; cnt+=mid-p+1; } } rep(i,l,r) a[i]=t[i];}
快速幂:25s
现在熟练了,以后就一行了
怕a*a或者t*a爆了的话见下面的
LL pow_mod(LL a,LL b,LL p){LL t=1;for(;b;b>>=1,a=a*a%p)if(b&1)t=t*a%p;return t;}
(快速乘):
这个也升级啦,尽量把小的放前面
ll mul(ll a,ll b,ll p){ll t=0;for(;b;b>>=1,a=(a<<1)%p)if(b&1)t=(t+a)%p;return t;}
扩展欧几里得:30s
神奇的代码缩减
LL exgcd(LL a,LL b,LL &x,LL &y){ if(!b) return x=1,y=0,a; LL d=exgcd(b,a%b,x,y); return swap(x,y),y-=a/b*x,d;}
floyd+最小环:40s
rep(k,1,n){ rep(i,1,k-1) rep(j,i+1,k-1) ans=min(ans,dis[i][j]+map[i][k]+map[k][j]); rep(i,1,n) rep(j,1,n) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);}
Phi:
LL phi(LL n){ LL res=n; LL sqn=(LL)sqrt(n+0.5); for(LL i=2;i<=sqn;i==2?i++:i+=2) if(n%i==0) { res=res/i*(i-1);while(n%i==0)n/=i; } if(n>1)res=res/n*(n-1); return res;}
线性筛素数&欧拉&莫比乌斯:100s
void get_prim_phi_mu(){ cnt=0; MS(flag,0); phi[1]=1; mu[1]=1; rep(i,2,n) { if(!flag[i]) prim[++cnt]=i,phi[i]=i-1,mu[i]=-1; for(int j=1;j<=cnt && i*prim[j]<=n;j++) { flag[i*prim[j]]=1; if(i%prim[j]==0) { phi[i*prim[j]]=phi[i]*prim[j]; mu[i*prim[j]]=0; break; } else { phi[i*prim[j]]=phi[i]*(prim[j]-1); mu[i*prim[j]]=-mu[i]; } } }}
bsgs:学了再放
输入数据
inline const int read(){ int r=0,k=1;char c=getchar(); for(;c<'0'||c>'9';c=getchar())if(c=='-')k=-1; for(;c>='0'&&c<='9';c=getchar())r=r*10+c-'0'; return k*r;}
组合数取模:30s
MS(C,0);rep(i,0,n) C[i][0]=1;rep(i,1,n) rep(j,1,i) C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
求一个的话需要逆元:40s
inline LL C(int n,int m){ if(m+m>n) m=n-m; LL s1=1,s2=1; rep(i,1,m) s1=(s1*(n-i+1))%mod, s2=(s2*i)*mod; return (s1*pow_mod(s2,mod-2,mod))%mod;}
如果范围较小而p较大,可以预处理阶乘、阶乘逆元
据说逆元用pow_mod会被卡,特意收集了VFK的模板
inline int modinv(const int &a){ int x1 = 1, x2 = 0, x3 = Mod; int y1 = 0, y2 = 1, y3 = a; while (y3 != 1) { int k = x3 / y3; x1 -= y1 * k, x2 -= y2 * k, x3 -= y3 * k; swap(x1, y1), swap(x2, y2), swap(x3, y3); } return y2 >= 0 ? y2 : y2 + Mod;}
KMP:
rep(i,2,n){ while(j&&s[i]!=s[j+1]) j=next[j]; next[i]=j+=s[i]==s[j+1];}
EXKMP:
int t=0; ext[1]=n;rep(i,2,n){ext[i]=max(0,min(ext[i-t+1],t+ext[t]-i));while(s[ext[i]+1] == s[i+ext[i]]) ext[i]++;if(i+ext[i] > t+ext[t]) t=i;}
0 0
- 秒
- 秒
- 秒转时分秒
- 秒转为时分秒
- 秒 毫秒 微秒 纳秒 皮秒
- 秒 毫秒 微秒 纳秒 皮秒 飞秒
- 秒刷
- 秒杀
- 秒杀
- 秒杀
- 秒杀
- 时分秒
- 秒杀
- 秒杀
- 秒钱包
- sql时分秒转为秒
- 秒转时分秒 js
- 秒转化为时分秒,时分秒转化为秒
- OCP 1Z0 053 162
- PhotoShop操作矩形选框工具右下角老有个加号(已解决!)
- apache-common pool的使用
- 二叉树最大宽度和高度
- Linux定时任务不能调用copy的java线程。
- 秒
- java final
- 润乾——角色管理
- [leetcode] Climbing Stairs
- POJ 3311 Hie with the Pie (Floyd+状态压缩)
- strcpy
- listview下拉刷新
- 利用循环求和2
- Android数据存储之SharedPreferens