08 2012 档案
【SPOJ】1557 Can you answer these queries II
摘要:询问区间最大连续和,相同的只能算一次。可以不取,即为0线段树在线做不到,只好离线搞。一般最大连续和,都是以一个点为起点,往左或往右。其实,还可以以一个点为起点,往上最大是多少。用pos标记一个数之前更新到的位置。比如:-3 2 -3 1用线段树成段覆盖:(越下方越早更新到)1 1 1 1 -3 -32 2-3nowsum表示当前深度积累的总和。nowup表示当前深度从底往上的最大值。totsum,totup同理,表示的是以某个叶子为起点对应的值。加上读入优化,快了2s…… 1 #include<cstdio> 2 #include<cstring> 3 #include 阅读全文
posted @ 2012-08-30 18:08 DrunBee 阅读(704) 评论(0) 推荐(0) 编辑
【SPOJ】6779 Can you answer these queries VII
摘要:SPOJ……无力吐槽了,反正RP好的时候过了,其他时候都是TLE。只能怪自己动态树太龊了吧。。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #define MAX(a,b) ((a)>(b)?(a):(b)) 6 #define oo 0x7FFFFFFF 7 #define MAXN 200010 8 using namespace std; 9 bool vis[MAXN]; 10 int e, first[MAXN], 阅读全文
posted @ 2012-08-30 00:10 DrunBee 阅读(629) 评论(0) 推荐(0) 编辑
【SPOJ】4487 Can you answer these queries VI
摘要:仍然是询问区间最大连续和,只不过多了插入和删除操作。线段树搞不定了。。伸展树来了。插入删除偷懒那样写了,加了读入优化卡过的。 1 #include<cstdio> 2 #include<iostream> 3 #define MAX(a,b) ((a)>(b)?(a):(b)) 4 #define oo 1000000000 5 #define MAXN 200010 6 using namespace std; 7 int n, a[MAXN]; 8 struct SplayTree { 9 int root, size; 10 int next[MAXN].. 阅读全文
posted @ 2012-08-29 15:27 DrunBee 阅读(415) 评论(0) 推荐(0) 编辑
【SPOJ】2916 Can you answer these queries V
摘要:操作:给出x属于[x1,y1],y属于[x2,y2],求[x,y]的最大连续和。将区间分3段考虑,答案可能由某一段的最大连续和,或者某一段往左的最大连续和,某一段往右的最大连续和组合而来。需要特判的是,区间可能存在包含关系。 1 #include<cstdio> 2 #define MAX(a,b) ((a)>(b)?(a):(b)) 3 #define MAXN 10010 4 #define oo 987654321 5 struct node { 6 int left, right, sum, val; 7 void Init() { 8 ... 阅读全文
posted @ 2012-08-29 12:28 DrunBee 阅读(333) 评论(0) 推荐(0) 编辑
【SPOJ】2713 Can you answer these queries IV
摘要:操作:1,把[x,y]每个数k变成sqrt(k),向下取整。2,查询区间的和。就算10^18,sqrt后减少的很快。当一个数为0或1时,它不会再变化了,把不会变化的区间标记,不再访问。所以暴力更新总的可以视为O(nlogn)的。 1 #include<cstdio> 2 #include<cmath> 3 #include<algorithm> 4 #define EPS 1e-8 5 #define MAXN 100010 6 typedef long long LL; 7 using namespace std; 8 struct node { 9 LL 阅读全文
posted @ 2012-08-29 09:53 DrunBee 阅读(257) 评论(0) 推荐(0) 编辑
【SPOJ】1043 Can you answer these queries III
摘要:操作:1,更新某个位置的值。2,查询区间最大连续和。更新位置然后PushUp。查询同【SPOJ】1043 Can you answer these queries I。 1 #include<cstdio> 2 #define MAX(a,b) ((a)>(b)?(a):(b)) 3 #define MAXN 50010 4 #define oo 1000000000 5 struct node { 6 int left, right, sum, val; 7 void Init() { 8 sum = 0; 9 left = right = v... 阅读全文
posted @ 2012-08-29 00:16 DrunBee 阅读(334) 评论(0) 推荐(0) 编辑
【SPOJ】1043 Can you answer these queries I
摘要:操作:查询区间最大连续和。每个节点保存当前区间往左,往右的最大和。往左最大连续和=max(左区间往左最大连续和,左区间的和+右区间往左最大连续和)。区间最大值=max(左,右区间最大值,左区间右连续+右区间左连续)。返回答案时,区间需要不断的合并。 1 #include<cstdio> 2 #define MAX(a,b) ((a)>(b)?(a):(b)) 3 #define MAXN 50010 4 #define oo 1000000000 5 struct node { 6 int left, right, sum, val; 7 void Init() { 8 .. 阅读全文
posted @ 2012-08-29 00:08 DrunBee 阅读(379) 评论(0) 推荐(0) 编辑
【CodeForces】86D Powerful array
摘要:题意:给出一个数列1~n。令ks表示s的出现次数。询问区间[x,y]中,s * ks^2之和。将数列分成sqrt(n)块,不在区间范围内的暴力,但是在区间范围内的无法常数时间统计。以下算法及证明摘自CodeForces...Let's sort the query intervals according to the following rule: first come the intervals with the left ends in Q_1, then the intervals with the left ends in Q_2, and so on. And if the 阅读全文
posted @ 2012-08-28 21:03 DrunBee 阅读(360) 评论(0) 推荐(0) 编辑
【CodeForces】91E Igloo Skyscraper
摘要:题意:n幢摩天大楼,第i幢初始高度为a[i],每个单位时间增长b[i]。询问区间[x,y]的大楼在t时刻的最大高度。虽然是区间查询,线段树不会搞。先读入询问,对时间非降排序,离线搞是很显然的。分成sqrt(n)块,在区间内的每块在常数时间内得到答案,两端暴力答案。高度y[i]=a[i]+b[i]*t,是直线方程。所以每块在常数时间得到答案,就要维护每块直线的单调性,剔除不影响答案的直线。由于块内答案是递增的,所以直线的斜率也是递增的。所以对每块的直线斜率非降排序。设有k1,k2,k3三条直线,且斜率递增,若k1与k2的交点在k3的下方,那么k2显然是多余的。纸上yy一下,比较时把除法化为乘法, 阅读全文
posted @ 2012-08-28 18:18 DrunBee 阅读(503) 评论(0) 推荐(0) 编辑
【CodeForces】13E Holes
摘要:题意:有n个洞,编号1~n,每个洞有一个power,若有球掉入第i个洞,会被弹到第i+power[i]个洞。两种操作:1,球掉入第i个洞后,问弹出n个洞前最后掉入的洞的编号,以及弹的次数。2,修改第i个洞的power值。很裸的动态树。与这题本质上是相同的:【HYSBZ】1036 树的统计Count但是,通过分块暴力,可以做到O(n*sqrt(n))。很显然,将1~n分成sqrt(n)块。一个很直接的想法,把a块的最后一个直接指向b块的最后一个(a!=b),这样暴力非完整的块,其他块O(1)得到。但是,可以有更简单的写法,把相同块中每个洞都指向会到达的最后一个洞,并统计其中跳过多少个。查询就暴力 阅读全文
posted @ 2012-08-28 13:15 DrunBee 阅读(374) 评论(0) 推荐(0) 编辑
【HDU】4391 Paint The Wall
摘要:题意:给出n个节点,编号0~n-1。1 把[x,y]颜色覆盖为z。2 询问[x,y]颜色为z的有多少个。题解:http://page.renren.com/601081183/note/867254911懒得hash,直接用map搞。把数列分成sqrt(n)段,如果每段在完整的查询区间内,可以O(1)得到答案,否则对该段暴力答案。 1 #include<cstdio> 2 #include<cmath> 3 #include<map> 4 #define EPS 1e-8 5 #define MAXM 331 6 #define MAXN 100010 7 阅读全文
posted @ 2012-08-27 17:08 DrunBee 阅读(338) 评论(0) 推荐(0) 编辑
【总结】动态树
摘要:0、BFS将无根树转化为有根树。1、bef[x]=y。表示x的父亲是y。这样建树构成了一片森林。2、Access(x)。表示以x为起点,一直到根节点,构造出一条链。这条链用splay维护,可以很好的支持插入和删除操作。这条链只有根节点与原树有联系。3、Splay(x)。同伸展树,用于维护提取出的链。通过splay操作,使得均摊logn。4、MakeRoot(x)。表示把x节点设为根。一棵树根的变化,仅与x到根的路径有关,即把路径反向即可。因此相当于把x到根的链翻转,bef构成的森林不变。A、操作1:link,操作2:cut。【HDU】2475 BoxB、路径中单点更新/成段更新/查询。(其实这 阅读全文
posted @ 2012-08-26 23:39 DrunBee 阅读(3490) 评论(0) 推荐(0) 编辑
【HDU】4010 Query on The Trees
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #include<algorithm> 6 #define MAXN 300010 7 #define MAXM 600010 8 #define CLEAR(a,b) memset(a,b,sizeof(a)) 9 using namespace std; 10 int first[MAXN], next[MAXM], v[MAXM], e; 11 bool vis[MAXN 阅读全文
posted @ 2012-08-26 22:45 DrunBee 阅读(997) 评论(0) 推荐(0) 编辑
【SPOJ】2798 Query on a tree again!
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<queue> 5 #define MAXN 100100 6 #define MAXM 200100 7 using namespace std; 8 bool vis[MAXN]; 9 int e, first[MAXN], next[MAXM], v[MAXM]; 10 struct LCT { 11 int bef[MAXN]; 12 int next[MAXN][2], pre[MAXN], key 阅读全文
posted @ 2012-08-25 18:01 DrunBee 阅读(427) 评论(0) 推荐(0) 编辑
【SPOJ】913 Query on a tree II
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #define MAXN 10010 6 #define MAXM 20010 7 using namespace std; 8 struct LCT { 9 int bef[MAXN]; 10 int next[MAXN][2], pre[MAXN], key[MAXN], sum[MAXN], num[MAXN]; 11 void Init() { 12 memset(ne... 阅读全文
posted @ 2012-08-25 15:02 DrunBee 阅读(606) 评论(1) 推荐(0) 编辑
【POJ】2763 Housewife Wind
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #define MAXN 100010 6 #define MAXM 200010 7 using namespace std; 8 struct LCT { 9 int bef[MAXN], belong[MAXN]; 10 int next[MAXN][2], pre[MAXN], key[MAXN], sum[MAXN]; 11 void Init() { 12 mems... 阅读全文
posted @ 2012-08-23 22:40 DrunBee 阅读(533) 评论(0) 推荐(0) 编辑
【HDU】3966 Aragorn's Story
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #define MAXN 50010 6 #define MAXM 100010 7 using namespace std; 8 struct LCT { 9 int bef[MAXN]; 10 int next[MAXN][2], pre[MAXN], key[MAXN], add[MAXN]; 11 void Init() { 12 memset(next, 0, siz... 阅读全文
posted @ 2012-08-23 22:07 DrunBee 阅读(487) 评论(0) 推荐(0) 编辑
【POJ】3237 Tree
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #include<algorithm> 6 #define MAXN 100010 7 #define MAXM 200010 8 #define oo 0x7FFFFFFF 9 using namespace std; 10 bool vis[MAXN]; 11 int first[MAXN], next[MAXM], v[MAXM], cost[MAXM], e; 12 s 阅读全文
posted @ 2012-08-23 21:40 DrunBee 阅读(712) 评论(0) 推荐(0) 编辑
【CodeForces】191C Fools and Roads
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<queue> 5 #define MAXN 100010 6 #define MAXM 200010 7 using namespace std; 8 int first[MAXN], next[MAXM], v[MAXM], e; 9 bool vis[MAXN]; 10 struct LCT { 11 int bef[MAXN], belong[MAXN]; 12 int next[MAXN][2], 阅读全文
posted @ 2012-08-23 11:17 DrunBee 阅读(626) 评论(0) 推荐(0) 编辑
【URAL】1553 Caves and Tunnels
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #include<algorithm> 6 #define MAXN 100010 7 #define MAXM 200010 8 using namespace std; 9 bool vis[MAXN]; 10 int first[MAXN], second[MAXM], v[MAXM], e; 11 struct LCT { 12 int bef[MAXN]; 13 in 阅读全文
posted @ 2012-08-23 02:39 DrunBee 阅读(414) 评论(0) 推荐(0) 编辑
【HYSBZ】1036 树的统计Count
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #include<algorithm> 6 #define oo 0x7FFFFFFF 7 #define MAXN 30010 8 #define MAXM 60010 9 using namespace std; 10 int first[MAXN], next[MAXM], v[MAXM], e; 11 bool vis[MAXN]; 12 struct LCT { 13 阅读全文
posted @ 2012-08-23 01:28 DrunBee 阅读(408) 评论(0) 推荐(0) 编辑
【HYSBZ】2002 Bounce 弹飞绵羊
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #define MAXN 200010 5 using namespace std; 6 struct LCT { 7 int bef[MAXN]; 8 int next[MAXN][2], pre[MAXN], key[MAXN], sum[MAXN]; 9 void Init() { 10 memset(next, 0, sizeof(next)); 11 memset(pre, 0, siz... 阅读全文
posted @ 2012-08-22 19:58 DrunBee 阅读(812) 评论(0) 推荐(0) 编辑
【FOJ】2082 过路费
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #define MAXN 50010 6 #define MAXM 100010 7 using namespace std; 8 int first[MAXN], next[MAXM], v[MAXM], cost[MAXM], e; 9 bool vis[MAXN]; 10 struct LCT { 11 int bef[MAXN], belong[MAXN]; 12 int next 阅读全文
posted @ 2012-08-22 10:47 DrunBee 阅读(406) 评论(0) 推荐(0) 编辑
【SPOJ】375 Query on a tree
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<iostream> 5 #include<algorithm> 6 #define MAXN 10010 7 #define MAXM 20010 8 #define oo 0x7FFFFFFF 9 using namespace std; 10 int first[MAXN], next[MAXM], v[MAXM], cost[MAXM], e; 11 bool vis[MAXN]; 12 str 阅读全文
posted @ 2012-08-22 02:00 DrunBee 阅读(530) 评论(0) 推荐(0) 编辑
【HDU】2475 Box
摘要:Splay: 1 #include<cstdio> 2 #include<cstring> 3 #define MAXN 100010 4 int first[MAXN], next[MAXN], v[MAXN], e; 5 int seq[MAXN], cnt; 6 int n; 7 bool vis[MAXN]; 8 struct SplayTree { 9 int root; 10 int next[MAXN][2], pre[MAXN]; 11 void Init() { 12 pre[0] = next[0][0] = nex... 阅读全文
posted @ 2012-08-21 22:35 DrunBee 阅读(1136) 评论(0) 推荐(0) 编辑
【总结】伸展树
摘要:伸展树是一枚二叉树,可以维护一个数列,或者可以作为二叉搜索树,因为无论怎么旋转,它的中序遍历是不变的。1、伸展操作。Splay(x,goal):旋转结点x,使它成为结点goal的儿子。至于旋转,本质上只有左旋和右旋。2、插入。如果作为二叉搜索树,则插入与二叉搜索树一样,最后把该结点旋转到根。如果用于维护一个数列,要求在x位置之前插入val(val可以为一个数字或一个序列),则将第x-1个结点旋转到根,将第x个结点旋转到第x-1个结点的儿子,那么根据中序遍历,val应插入在第x个结点的左儿子。3、删除。与插入同理。4、Select(k)。在二叉搜索树中,对每个结点维护一个num值,如果x左儿子的 阅读全文
posted @ 2012-08-20 23:02 DrunBee 阅读(3433) 评论(0) 推荐(1) 编辑
【HDU】3726 Graph and Queries
摘要:1 #include<cstdio> 2 #include<iostream> 3 #define MAXN 400010 4 #define PushUp(x) num[x] = num[next[x][0]] + num[next[x][1]] + 1; 5 using namespace std; 6 pair<int, int> edge[MAXN]; 7 int first[MAXN], next[MAXN], cost[MAXN], e; 8 int father[MAXN]; 9 bool del[MAXN]; 10 struct ASK { 阅读全文
posted @ 2012-08-19 16:31 DrunBee 阅读(842) 评论(0) 推荐(0) 编辑
【POJ】3580 SuperMemo
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define oo 0x7FFFFFFF 5 #define MAXN 200010 6 using namespace std; 7 struct SplayTree { 8 int size, root, top; 9 int st[MAXN], a[MAXN]; 10 int next[MAXN][2], pre[MAXN], key[MAXN], num[MAXN]; 11 int add[MAXN], mi... 阅读全文
posted @ 2012-08-16 01:38 DrunBee 阅读(737) 评论(0) 推荐(0) 编辑
【HYSBZ】1500 维修数列
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define oo 0x7FFFFFFF 5 #define MAXN 1000010 6 using namespace std; 7 struct SplayTree { 8 int root, size; 9 int a[MAXN], st[MAXN], top; 10 int next[MAXN][2], pre[MAXN], key[MAXN], num[MAXN]; 11 bool flip[MAXN];... 阅读全文
posted @ 2012-08-15 20:46 DrunBee 阅读(779) 评论(0) 推荐(0) 编辑
【HDU】3487 Play with Chain
摘要:1 #include<cstdio> 2 #include<algorithm> 3 #define MAXN 300010 4 using namespace std; 5 struct SplayTree { 6 int root, size; 7 int next[MAXN][2], key[MAXN], pre[MAXN], num[MAXN]; 8 bool flip[MAXN], space; 9 inline void PushUp(int x) { 10 num[x] = num[next[x][0]] + n... 阅读全文
posted @ 2012-08-14 01:56 DrunBee 阅读(782) 评论(0) 推荐(0) 编辑
【HDU】1754 I Hate It
摘要:线段树: 1 #include<cstdio> 2 #define INF 987654321 3 #define MAXN 200010 4 int tree[MAXN << 2]; 5 inline int MAX(int x, int y) { 6 return x > y ? x : y; 7 } 8 inline void PushUp(int rt) { 9 tree[rt] = MAX(tree[rt << 1], tree[rt << 1 | 1]);10 }11 void Build(int L, int R, int r 阅读全文
posted @ 2012-08-13 01:11 DrunBee 阅读(720) 评论(0) 推荐(0) 编辑
【HYSBZ】1503 郁闷的出纳员
摘要:1 #include<cstdio> 2 #define INF 0x7FFFFFFF 3 #define MAXN 100010 4 struct SplayTree { 5 int num[MAXN], next[MAXN][2], pre[MAXN], key[MAXN]; 6 int root, size; 7 inline void PushUp(int x) { 8 num[x] = num[next[x][0]] + num[next[x][1]] + 1; 9 } 10 inline void Rota... 阅读全文
posted @ 2012-08-12 20:00 DrunBee 阅读(620) 评论(0) 推荐(0) 编辑
【POJ】3481 Double Queue
摘要:1 #include<cstdio> 2 #define MAXN 100010 3 struct SplayTree { 4 int size, root; 5 int next[MAXN][2], pre[MAXN], key[MAXN], pos[MAXN]; 6 void Init() { 7 size = root = 0; 8 next[0][0] = next[0][1] = 0; 9 }10 void NewNode(int &rt, int father, int val, int id) {11 ... 阅读全文
posted @ 2012-08-12 02:09 DrunBee 阅读(1379) 评论(0) 推荐(0) 编辑
【HYSBZ】1588 营业额统计
摘要:数据有两组漏了一个数,所以在读入之前要先赋值为0。 1 #include<cstdio> 2 #include<algorithm> 3 #define MAXN 100010 4 #define INF 0x7FFFFFFF 5 using namespace std; 6 struct SpalyTree { 7 int size, root; 8 int next[MAXN][2], pre[MAXN], key[MAXN]; 9 void Init() {10 size = root = 0;11 }12 void NewNode... 阅读全文
posted @ 2012-08-09 23:20 DrunBee 阅读(709) 评论(0) 推荐(0) 编辑
【总结】AC自动机
摘要:给出n个单词,再给出一段包含m个字符的文章,找出有多少个单词在文章里出现过。1、对n个单词构造字典树。2、构造失败指针。设当前节点为X,失败指针指向Y。1。若当前节点X没有儿子t,则X的儿子t等价于Y的儿子t。2。若当前节点X有儿子t,t的失败指针指向Y的儿子t。Y与X有最长公共后缀。3、模式匹配。沿着next指针遍历。例:4个单词:0101、1011、1100、0010。在构造完失败指针后,顺便完善next指针,使得匹配时只需沿着next指针遍历,匹配时沿着fail指针遍历是为了统计出当前串包含的子串。模板题:【HDU】2222 Keywords Search【HDU】2896 病毒侵袭【H 阅读全文
posted @ 2012-08-09 18:24 DrunBee 阅读(3413) 评论(0) 推荐(1) 编辑
【ZOJ】3494 BCD Code
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MOD 1000000009 5 #define MAXN 2010 6 #define MAXM 210 7 using namespace std; 8 struct Trie { 9 bool end; 10 int fail, next[2]; 11 void Init() { 12 end = false; 13 fail = 0; 14 memset(next... 阅读全文
posted @ 2012-08-09 01:05 DrunBee 阅读(469) 评论(0) 推荐(0) 编辑
【HDU】3247 Resource Archiver
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXN 60000 5 #define MAXL (1<<10) 6 #define MAXM 200 7 using namespace std; 8 struct Trie { 9 bool virus; 10 int end, fail, next[2]; 11 void Init() { 12 virus = false; 13 end = fail = next[0] = n... 阅读全文
posted @ 2012-08-07 23:13 DrunBee 阅读(565) 评论(0) 推荐(0) 编辑
【ZOJ】3228 Searching the String
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXN 100010 5 #define MAXM 26 6 #define INF 123456789 7 using namespace std; 8 struct Trie { 9 int fail, pos[2], cnt[2], len, next[MAXM]; 10 void Init() { 11 len = fail = pos[0] = pos[1] = cnt[0] = cnt[1] = ... 阅读全文
posted @ 2012-08-07 00:30 DrunBee 阅读(588) 评论(0) 推荐(0) 编辑
【HDU】3341 Lost's revenge
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXN 15000 5 #define MAXM 510 6 using namespace std; 7 int size, K[5], dp[MAXN][MAXM]; 8 bool vis[MAXN]; 9 char str[MAXM]; 10 struct Trie { 11 int cnt, fail, next[4]; 12 void Init() { 13 cnt = fail = 0; 14 ... 阅读全文
posted @ 2012-08-06 22:48 DrunBee 阅读(451) 评论(0) 推荐(0) 编辑
【HDU】2296 Ring
摘要:1 #include<iostream> 2 #include<string> 3 #include<queue> 4 #include<cstdio> 5 #include<cstring> 6 #define MAXM 26 7 #define MAXN 1010 8 #define INF 123456789 9 using namespace std; 10 char str[MAXN][MAXM]; 11 string path[MAXM << 1][MAXN]; 12 int size, dp[MAXM < 阅读全文
posted @ 2012-08-05 17:43 DrunBee 阅读(515) 评论(0) 推荐(0) 编辑
【HDU】2457 DNA repair
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 #define MAXN 1010 6 #define INF 123456789 7 using namespace std; 8 struct Trie { 9 int fail, next[4]; 10 bool end; 11 void Init() { 12 end = false; 13 fail = 0; 14 memset(ne... 阅读全文
posted @ 2012-08-05 13:46 DrunBee 阅读(435) 评论(0) 推荐(0) 编辑
【POJ】1625 Censored!
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXM 256 5 #define MAXN 550 6 using namespace std; 7 struct Trie { 8 bool end; 9 int fail, next[MAXM]; 10 void Init() { 11 end = false; 12 fail = 0; 13 memset(next, 0, sizeof(next)); 14 ... 阅读全文
posted @ 2012-08-05 12:37 DrunBee 阅读(433) 评论(0) 推荐(0) 编辑
【HDU】2825 Wireless Password
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXN 110 5 #define MAXM 26 6 #define MAXL (1<<10) 7 #define MOD 20090717 8 using namespace std; 9 char str[MAXN]; 10 int size, digit[MAXL], dp[30][MAXN][MAXL]; 11 struct node { 12 int fail, end, next[MAXM]; 13 阅读全文
posted @ 2012-08-04 11:23 DrunBee 阅读(462) 评论(0) 推荐(0) 编辑
【HDU】2243 考研路茫茫――单词情结
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXN 26 5 #define MOD 10330176681277348905LL 6 typedef unsigned long long LL; 7 using namespace std; 8 char str[MAXN]; 9 int size; 10 LL total, ans; 11 struct node { 12 int fail, next[MAXN]; 13 bool end; 14 void... 阅读全文
posted @ 2012-08-04 10:12 DrunBee 阅读(687) 评论(0) 推荐(1) 编辑
【POJ】2778 DNA Sequence
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 typedef long long LL; 5 #define MAXN 110 6 #define MOD 100000 7 using namespace std; 8 char str[MAXN]; 9 int size; 10 struct Matrix { 11 LL mat[MAXN][MAXN]; 12 void Zero() { 13 memset(mat, 0, sizeof(mat)); 14 } ... 阅读全文
posted @ 2012-08-04 00:48 DrunBee 阅读(496) 评论(0) 推荐(1) 编辑
【ZOJ】3430 Detect the Virus
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #include<queue> 5 #define MAXL 256 6 #define MAXN 50010 7 using namespace std; 8 char str[MAXN]; 9 int dg[MAXN], code[MAXN], size; 10 bool vis[MAXN]; 11 struct node { 12 int fail, cnt, next[MAXL]; 13 void Init() { 14 阅读全文
posted @ 2012-08-03 22:23 DrunBee 阅读(689) 评论(0) 推荐(0) 编辑
【HDU】3065 病毒侵袭持续中
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXN 2000010 5 #define MAXM 50000 6 #define MAXL 128 7 using namespace std; 8 char str[MAXN], dic[MAXM][60]; 9 int size, cnt[MAXM];10 struct node {11 int pos, fail, next[MAXL];12 void Init() {13 pos = fail = 0;14 .. 阅读全文
posted @ 2012-08-01 22:40 DrunBee 阅读(950) 评论(0) 推荐(0) 编辑
【HDU】2896 病毒侵袭
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXN 100010 5 #define MAXL 510 6 #define MAXM 128 7 using namespace std; 8 char str[MAXN]; 9 int size;10 bool vis[MAXL], flag;11 struct node {12 int pos, fail, next[MAXM];13 void Init() {14 pos = fail = 0;15 ... 阅读全文
posted @ 2012-08-01 21:53 DrunBee 阅读(572) 评论(0) 推荐(0) 编辑
【HDU】2222 Keywords Search
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #define MAXN 1000000 5 #define MAXM 26 6 using namespace std; 7 char str[MAXN]; 8 int size, ans; 9 struct node {10 int fail, cnt, next[MAXM];11 bool vis;12 void Init() {13 fail = cnt = 0;14 vis = false;15 ... 阅读全文
posted @ 2012-08-01 21:01 DrunBee 阅读(523) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示