/**
异或最大值(01字典树)
题意:求n个非负数中任意2个的异或值的最大值。n数量级为10^5
分析:直接暴力肯定超时了。一个非负整数可以看成1个32位的01字符串,n个数可以看成n个字符串,因此可以建立字典树,
建好树后,对于任意非负整数x,可以沿着树根往下贪心找到y,使得x异或y最大,复杂度为树的深度。
*/
#include
#include
#include
#in...
分类:
其他好文 时间:
2015-04-26 12:27:34
阅读次数:
177
算法核心,Next数组(模式串的最长前缀后缀表)。KMP的思想就是,当匹配不正确时,模式串向后移动的距离为:已匹配的字符串个数 - next[j]而Next数组的算法起始也是递归的字符串匹配过程。Impl: 1 //Next数组计算 2 void CalNext(const char* p, int...
分类:
其他好文 时间:
2015-04-10 10:55:45
阅读次数:
126
题目大意:
有一个长度为N的字符串,只有'E'、'O'、'F'组成, 字符串中禁止出现"OO"相连的情况。
问:最多有多少组不同的字符串满足情况。
思路:
根据讨论区来的思路。设N位字符串,最后一位是'O'的字符串个数为a[N],最后一位不是'O'字符
的字符串个数为b[N],总的 字符串个数为f[N],则:
f[N] = a[N] + b[N]
a[N] = b[N-1]
b[N] = 2*f[N-1]
则推出:f[N] = 2*(f[N-1] + f[N-2])。
设f[1] = 3,f[2] = 8...
分类:
其他好文 时间:
2015-04-05 20:30:52
阅读次数:
166
问题描述:Trie树在字符串处理中的应用十分重要,最典型的应用就是输入法和搜索引擎中的字符串自动补全功能。其核心思想是用一颗树来存储一个字典,树的每一条边表示单词的一个字符,在每个节点上记录以从根节点到当前节点所经过的路径为前缀的字符串个数。利用字典树,可以实现O(log(n))的单词插入、单词查询...
分类:
其他好文 时间:
2015-02-06 16:38:28
阅读次数:
109
原题地址方法I:枚举依次枚举前缀,然后检验改进1:只需从长到短枚举最短的字符串的前缀改进2:检验前缀合法性时可以进行剪枝优化,加快搜索效率时间复杂度不不太好分析,加上改进之后效率还不错。方法II:字典树时间复杂度O(nm),其中n是字符串个数,m是字符串长度代码: 1 struct TrieNode...
分类:
其他好文 时间:
2015-01-26 16:44:20
阅读次数:
174
一开始打算使用Cocos的RichText的
但是发现问题多多:
1、不支持中文,里面计算字符串长度的时候只计算了英文,因为在中文长度下占的是2个字节
2、使用起来其实很不方便的,不能使用平常的控件往里面添加
3、明明是CocosStudio的东西,但是却使用CCNode那一边的东西,导致触摸没法解
4、字符串换行直接根据长度来截取字符串个数,但我印象中不同的字符宽度是不一样的
5、没...
分类:
其他好文 时间:
2014-11-25 00:22:17
阅读次数:
505
题目链接:poj 2778 DNA Sequence
题目大意:给定一些含有疾病的DNA序列,现在给定DNA长度,问有多少种不同的DNA序列是健康的。
解题思路:对DNA片段建立AC自动机,因为最多10个串,每个串最长为10,所以最多可能有100个节点,在长度为n时
以每个节点终止的健康字符串个数形成一个状态集,通过AC自动机形成的边可以推导出n+1的状态集,走到单词节点是
...
分类:
其他好文 时间:
2014-11-09 01:10:37
阅读次数:
265
UVA 261 - The Window Property
题目链接
题意:这题题意挺绕的。。就是给定一个字符串长度n,扫描长度为k = [1,n],然后每次只能扫描连续k个字符的子串,要求所有扫描中,每次扫描中出现的不同字符串个数都不超过k + 1,那么这个字符串就是window property,如果不是的话,就还要找出下标最小的不符合的位置(就是n次扫描中找最小的)
思路:...
个人第一道后缀数组题目。对于每一个后缀suffix(i),都有len-sa[i]个前缀(也即有len-sa[i]个不同的字符串),其中与排名前一位的后缀有height[i]个共同的前缀,最后所得到的新的字符串个数为len-sa[i]-height[i].因此这题只要求出sa以及height即可求得答...
分类:
其他好文 时间:
2014-08-12 18:14:44
阅读次数:
231
UVA 11488 - Hyper Prefix Sets
题目链接
题意:给一些01串,定义一个P(s)表示:拥有相同长度前缀的字符串个数 * 该前缀长度,求最大的P(S)
思路:Trie,建好Trie树后dfs一遍记录答案最大值
代码:
#include
#include
#include
using namespace std;
const int SI...
分类:
其他好文 时间:
2014-08-02 18:25:04
阅读次数:
202