摘要:
HDU 3746 Cyclic Nacklace ( KMP求最小循环节 )len - nextval[len]即为最小循环节长度。#include #include #include #include using namespace std;const int MAXN = 100100;const int INF = 1 #include #include #include using namespace std;const int MAXN = 1000010;char str[MAXN];int nextval[MAXN];int len;void getNext( char s[]. 阅读全文
posted @ 2013-09-29 21:04
冰鸮
阅读(318)
评论(0)
推荐(0)
摘要:
dp[i]代表前i个字符组成的串中所有前缀出现的次数。dp[i] = dp[next[i]] + 1;因为next函数的含义是str[1]~str[ next[i] ]等于str[ len-next[i]+1 ]~str[len],即串的前缀后缀中最长的公共长度。对于串ababa,所有前缀为:a, ab,aba,abab, ababa, dp[3] = 3;到达dp[5]的时候,next = 3, 它与前面的最长公共前缀为aba,因此dp[5]的凑法应该加上dp[3],再+1是加上ababa它本身。说不太清楚……从感觉上比较类似于那个“给你几种面值的硬币,问凑出指定钱数的所有凑法”的dp方式。 阅读全文
posted @ 2013-09-29 14:40
冰鸮
阅读(224)
评论(0)
推荐(0)
摘要:
设串为str, 串长为len。对整个串求一遍next函数,从串结尾开始顺着next函数往前找#include #include #include using namespace std;const int MAXN = 1000100;char str[MAXN];char tmp[MAXN];int nextval[MAXN];int len;void GetNextVal( char *s, int lenth ){ int i = 0, j = -1; nextval[0] = -1; while ( i len/3 ) ans = nextval[ans]; ... 阅读全文
posted @ 2013-09-29 09:18
冰鸮
阅读(293)
评论(0)
推荐(0)
摘要:
一开始看的时候就想歪了,比赛的时候一直在YY线段树区间覆盖,然后纠结节点数太多开不下怎么办啊啊啊啊……然后昨天吃饭的时候也在纠结这到底是个啥题,后来发现公共前缀->前缀??!!!!->这不是很显然的Trie么……QAQ举例说明:对于subnet: 123.45.4.0/22,转化成二进制后,取前22位(长度由子网掩码决定)加入Trie树,后面的IP一定是0所以无意义,然后每个节点开一个vector保存能到达这个节点的所有子网的Pid,以及该子网IP的最大值。对于ip_src:查找它所属于的所有子网组的Pid,并标记出来。对于ip_dst:看它与ip_src所属的所有子网组的Pid跟 阅读全文
posted @ 2013-09-29 09:06
冰鸮
阅读(482)
评论(0)
推荐(0)

浙公网安备 33010602011771号