随笔分类 - 字典树
摘要:题意:有这样的一个需求,一个程序能够动态的插入数字,并且能够以很快的速度给出一个数字在已有的数字集合中异或之后值的最大或者是最小值。解法:将插入的数构成一棵字典树,然后将每一个数字以贪心的思想去匹配,如果一个数字为1010,要求与它异或之后值的最小值,只需要在为1的地方优先匹配1,为0的地方优先匹配0;如果是求最大值就把这个数字进行取反操作,然后找出一个数与取反之后的数异或值最小即可。代码如下:#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#incl
阅读全文
摘要:要求输出每个单词在不产生歧义的情况下的最短前缀,直接构造出一颗字典树就可以了。先执行插入操作,对每一个单词经过的路径都进行一个自增的操作。再一次搜索每一个单词,当其遇到覆盖次数为一,或者是到了单词末尾就输出。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int N, idx;char s[1005][25], rec[25];struct Node{ int cnt, ch[26];}e[30000
阅读全文
摘要:该题题意是求给定的字符串集用一个打字机来打出所有的字符串(最后一个),顺序可以打乱,每次操作可以向打字机的末尾添加一个字符删除一个字符以及打印一个单词。这里有一个很强大的想法,那就是先假设每个单词都打印出来起消耗为 sumlenth * 2 + N,在统计所有的相同的字符数 M, 然后得到最长的一个单词的长度L,把这个单词的放在最后打印,最后答案就是 sumlen * 2 + N - M. 代码如下: 1 #include <cstdlib> 2 #include <cstdio> 3 #include <cstring> 4 using namespace
阅读全文
摘要:Repository Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 961Accepted Submission(s): 313Problem DescriptionWhen you go shopping, you can search in repository for avalible merchandises by the computers and internet. First you give the search syste
阅读全文
摘要:T9 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 629Accepted Submission(s): 250Problem DescriptionA while ago it was quite cumbersome to create a message for the Short Message Service (SMS) on a mobile phone. This was because you only have nine
阅读全文
摘要:What Are You Talking AboutTime Limit: 10000/5000 MS (Java/Others)Memory Limit: 102400/204800 K (Java/Others)Total Submission(s): 4050Accepted Submission(s): 1171Problem DescriptionIgnatius is so lucky that he met a Martian yesterday. But he didn't know the language the Martians use. The Martian
阅读全文