本博客tag
我的Tag列表
CF(93) | 单调栈(3) | KMP循环节(1) | HASH(1) |
TOJ(48) | codeM(3) | loj(1) | dfs序(1) |
Wannafly Union(23) | csa(3) | miller_rabin(1) | 网络流(1) |
AtCoder(17) | 姿势(3) | operator(1) | 网络赛(1) |
日常训练(17) | 容斥定理(3) | pollard_rho(1) | 物理?(1) |
随手练(9) | 科技(3) | python入门中(1) | 贪心(1) |
网赛(7) | 期望(3) | SA(1) | 天梯赛训练(1) |
树状数组(7) | 字符串匹配(2) | SPFA(1) | 图论(1) |
他校校赛(6) | 最短路(2) | ST(1) | 浙南(1) |
hiho(6) | 台州学院we are without brain 训练(2) | 补题(1) | 总决赛(1) |
51nod(5) | 位运算(2) | 概率dp(1) | 经验之谈(1) |
浙南联合训练赛(5) | 图论及其应用(2) | 比赛经验(1) | 矩阵快速幂(1) |
线段树(5) | dp(2) | ZOJ Monthly(1) | 神奇的bfs(1) |
学习?学个屁(5) | EOJ(2) | 2018ZJU校赛(1) | 数位dp(1) |
计算几何(5) | 985月赛(2) | Bestcoder(1) | 面积并(1) |
数论(4) | 2017CCPC网赛(2) | CCPC(1) | 模板题(1) |
概率论(4) | 2017icpc北京(2) | Farey sequences(1) | 逆序对(1) |
好题推荐(4) | 2018TZC训练(2) | fft(1) | 后缀数组(1) |
玲珑杯acm(4) | 多校(2) | Github(1) | 高斯消元(1) |
组合数学(4) | 博弈(2) | hackerrank(1) | 各种姿势(1) |
百度之星(4) | KMP(2) |
在n+m位二进制数中填入m个1的方案数为c(n+m,m),不填1的其余n位自动填0。再减去不符合要求的C(n+m,m-1)n次入栈m次出栈的合法排列次数则可参考卡特兰数公式。C(n+m,m)-C(n+m,m-1)
字符串算法选讲
斐波那契循环节,数学
正n边形面积 n*a*a/(4*tan(PI/n))
2017多校5 01代码 bitset的使用
无脑背包
void ZeroOnePack(int cost,int weight) { for (int i = v; i >= cost; i--) dp[i] = max(dp[i],dp[i - cost] + weight); } void CompletePack(int cost,int weight) { for (int i = cost; i <= v; i++) dp[i] = max(dp[i],dp[i - cost] + weight); } void MultiplePack(int cost,int weight,int n) { if (cost * n > v) { CompletePack(cost,weight); } else { int k = 1; while (k < n) { ZeroOnePack(cost * k,weight * k); n -= k; k *= 2; } ZeroOnePack(cost * n,weight * n); } }
矩阵模板
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=105; int G; struct MX { ll v[N][N]; void O() { memset(v,0,sizeof v); } void E() { memset(v,0,sizeof v); for(int i=0; i<G; i++)v[i][i]=1; } void P() { for(int i=0; i<G; i++) for(int j=0; j<G; j++)printf(j==G-1?"%d ":"%d ",v[i][j]); } MX operator+(const MX &b) const { MX c; c.O(); for(int i=0; i<G; i++) for(int j=0; j<G; j++)c.v[i][j]=v[i][j]+b.v[i][j]; return c; } MX operator*(const MX &b)const { MX c; c.O(); for(int k=0; k<G; k++) for(int i=0; i<G; i++) if(v[i][k])for(int j=0; j<G; j++)c.v[i][j]+=v[i][k]*b.v[k][j]; return c; } MX operator^(int p)const { MX y,x; y.E(),memcpy(x.v,v,sizeof(v)); for(; p; x=x*x,p>>=1)if(p&1)y=y*x; return y; } } a,ans;
马拉车
char a[110010]; char b[230000]="$"; int p[230000]; int len; int main(){ while(scanf("%s",a)!=EOF){ for(int i=0;i==0 || a[i-1]!='