2013年8月4日

uva1041 - Remember the Word(前缀树)

摘要: 摘自刘汝佳:不难想到这样的递推法:令d(i)表示从字符i开始的字符串(即后缀S[i..L])的分解方案数,则d(i)=sum{d(i+len(x))|单词x是S[i..L]的前缀}。 如果先枚举x,再判断它是否为S[i..L]的前缀,时间无法承受(最多可能有4000个单词,判断还需要一定的时间)。可以换一个思路,先把所有单词组织成Trie,然后试着在Trie中“查找”S[i..L]。查找过程中每经过一个单词结点,就找到一个上述状态转移方程中的x,最多只需要比较100次就能能找到所有的x。 代码如下:#include #include #include #include #inclu... 阅读全文
posted @ 2013-08-04 20:49 Primo... 阅读(246) 评论(0) 推荐(0)

hdu 3833 YY's new problem(简单哈希)

摘要: 刚开始的时候虽然也用了哈希,但复杂度是n^n的,所以果断的tle了。搜了一篇题解,顿时,膜拜之意油然而生,虽然复杂度都是n^n的,但是大神的代码果断的优化了。把复杂度从10^8降到了10^7了。同样使用哈希,达到的效果果断的有天差地别呀。。。代码如下:#include #include #include #include #include #include #include #include #include #include #define LL long long #define LLU unsigned long long #define INF 0x7ffffff... 阅读全文
posted @ 2013-08-04 15:57 Primo... 阅读(135) 评论(0) 推荐(0)

hdu 4000 - Fruit Ninja(树状数组)

摘要: 题意:给定一个1到n的排列,输出三元组(x,y,z) (满足条件x #include #include #include #include #include #include #include #include #include #define LL long long #define LLU unsigned long long #define INF 0x7fffffff #define MOD 100000007 using namespace std; #define lowbit(x) x&-x #define M 100005 int c[M]; LL su... 阅读全文
posted @ 2013-08-04 15:05 Primo... 阅读(137) 评论(0) 推荐(0)