摘要: 1 ///树状数组模板 2 int lowbit(int x) 3 { 4 return x&-x; 5 } 6 7 void updata(int i,int x) 8 { 9 if (i>n) return ; 10 a[i]+=x; 11 i+=lowbit(i); 12 updata(i,x); 13 } 14 15 int ... 阅读全文
posted @ 2016-07-30 10:06 pb2016 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 1 ///博弈模板 2 一)巴什博弈(Bash Game): 3 问题描述: 4 只有一堆n个物品,两个人轮流从这 5 堆物品中取物,规定每次至少取一 6 个,最多取m个。最后取光者得胜 7 问题解答: 8 很容易想到当n%(m+1)0时,先取必胜, 9 第一次先拿走n%(m+1),以后每个回合到 10 保持两人拿走的物品总和为m+1即可 11 12 二)威佐夫博弈(Wyth... 阅读全文
posted @ 2016-07-30 10:02 pb2016 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 1 ///最长上升子序列LIS模板 2 int BinSerch(int l,int r,int cut) 3 { 4 while (l>1; 7 if (cut>d[m]&&cutd[m]) l=m+1; 9 else r=m-1; 10 } 11 return 0; 12 } 13 14 int LIS(int n) 15... 阅读全文
posted @ 2016-07-30 09:42 pb2016 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 1 ///后缀数组模板 2 sa[i]表示所有后缀按字典数排序后以s[i] 3 开始的后缀排在第i位。height[i]表示字典数为i和i-1后缀的 4 的最长串的前缀。 5 int s[mx],sa[mx],t[mx],t2[mx],c[mx],n; 6 int rank[mx],height[mx]; 7 8 void build_sa(int m) 9 { 10 ... 阅读全文
posted @ 2016-07-30 09:40 pb2016 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 1 ///AC自动机模板 2 void insert(char *s) 3 { 4 int p=0; 5 for (int i=0;s[i];i++) 6 { 7 int k=s[i]-'a'; 8 if (tree[p].next[k]==-1) 9 { 10 tree[cut].... 阅读全文
posted @ 2016-07-30 09:36 pb2016 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 1 typedef struct Node 2 { 3 Node *next[26]; 4 int cut; 5 }Node; 6 Node *root; 7 void inser(char *s) 8 { 9 Node *p=root; 10 for (int i=0;s[i];i++) 11 { 12 i... 阅读全文
posted @ 2016-07-30 09:34 pb2016 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 1 ///KMP模板 2 ///生成next数组 3 void get_next() 4 { 5 int i=0,j=-1; 6 next[0]=-1; 7 while (s1[i]) 8 { 9 if (j==-1||s1[i]==s1[j]) 10 { 11 i++; 12 ... 阅读全文
posted @ 2016-07-30 09:18 pb2016 阅读(220) 评论(0) 推荐(0) 编辑