
ACM之字符串
文章平均质量分 74
noname40
这个作者很懒,什么都没留下…
展开
-
poj 2406 KMP应用
题意:根据题目给出的规则,一个字符串表示成a*n,求最大的n.思路:KMP的next[]的应用,不是很懂,看了许多别人的代码。其中if(len%(len-next[len])==0)这一句是精华所在,对其理解还不是很到位。索性记住算了。。。例如:next[6]=3; 对于s1s2s3s4s5s6s7s8s9 如果条件成立的话,意味着s1s2s3=s4s5s6=s7s8s9。转载了一篇写原创 2012-01-18 01:59:53 · 362 阅读 · 0 评论 -
poj 3450/poj 3080 多串最长公共子串 后缀数组
题意:就是求多串的最长公共子串思路:子串可以看作是字符串中后缀的前缀。把这些字符串连接起来,中间用不能出现的状态隔开,然后求其height数组,二分枚举一个字符串的子串长度,看是否存在连续n个最长公共前缀的长度都大于mid,并且这些公共长度分别属于n个字符串。poj 3080 保证最长的前提下,保证字典序,字典序是用sa数组来保证的,最先找到的公共前缀一定是字典序较小的,然后这些公共前原创 2012-06-05 23:13:13 · 517 阅读 · 0 评论 -
poj 2774 后缀数组 最长公共子串
题意:求两个长度最长是100000的字符串的公共子串。思路:参考罗穗骞的论文,就是在两个字符串中间加一个字符,利用倍增算法求height数组,height数组存储了排名相邻的两个后缀的最长公共子串长度,所以枚举新形成的字符串的height,同时要保证相邻两个后缀字符串是分别属于这两个字符串的。#include#include#includeusing namespace std;c原创 2012-06-01 19:13:35 · 537 阅读 · 0 评论 -
poj 2945 Find the clones (tire树)
题意:输入一些人的DNA序列,输出的意思是,第一行代表没有被克隆的人数,第二行是被克隆一次的人数。。。依此类推。思路:字典树,建树的时候保留DNA最后一个字母的count信息,存在ans[]数组里,这里有个技巧,一、没克隆的++。二、克隆过的++,同时上一个克隆的次数--;代码比较搓,5000MS限制,4000MS+水过,同时内存超了,释放了下内存,AC了。#includeusi原创 2012-02-09 23:08:37 · 625 阅读 · 0 评论 -
poj 3461 KMP
题意:输入案例次数,每一次的案例输入两个字符串,求第一个字符串在第二个字符串里出现了几次。思路:KMP 稍作改动可以AC#includeusing namespace std;char W[10005];int next[10005];char T[1000005];int len1,len2;int step;void get_next(){ int j=0,原创 2012-01-18 02:05:07 · 472 阅读 · 0 评论 -
poj 2001 trie 树
题意:求给出的字符串的最小前缀,此前缀满足是这些字符串中唯一的前缀,也就是这个前缀除了这个字符串以外不能再是其它字符串的前缀了.思路:trie这道题让我明晰了 strncpy()这个函数,它是把第二个字符串的前n个字符附给第一个字符串,但是我输出的时候却错了,可能第n个字符没有被覆盖,后来在第一个字符串的n这个位置改成'\0'...果断水过.#include#includeu原创 2012-02-17 12:34:54 · 354 阅读 · 0 评论 -
ctype.h包含的相关函数的用法
ctype.h里的函数 原文链接:http://blog.youkuaiyun.com/young0325/article/details/6625302 重点记忆:atof(),atoi(),字符串的数字,转化成float 和int 的数字。isalpha()和isalnum()...可以简化代码用。 1 字符测试函数 1> 函数原型均为in转载 2012-02-13 21:52:33 · 1111 阅读 · 0 评论 -
poj 2256 P U I 字符串
题意:看输入输出应该很明了,开始理解错了,以为输入的三句话是固定的呢,原来是任意的文本信息,然后没个字符串中,会出现P,U,I数值中的其中两个,然后根据P=UI,输出另外一个变量的数值。这道题是在heu的练习上做的,没A,后来发现是北大的原题,弄了半天终于A了,真是考验耐心的好题啊!!懒得简化代码了~ #include#includeusing namespace std;int m原创 2012-02-13 20:50:09 · 645 阅读 · 0 评论 -
poj 3630 tire树 phonelist 静态数组版
题意:判断给出的号码是否有是其它号码前缀的情况,有的话输出NO,没有输出YES。思路:tire树,指针版会超时,所以改用数组模拟。#includeusing namespace std;struct node{ int end; int count; int next[10];//子节点 void init()//初始化 { end=0; coun原创 2012-02-10 11:23:34 · 443 阅读 · 0 评论 -
hdu 1251 统计难题(tire 树 模版题)
题意:统计以某个字符串为前缀的单词的数量。思路:字典树,建树的同时统计,节点字符的个数#include#define max 26using namespace std;struct node{ int count;//记录此节点字串的个数 node *next[max];//子节点 node()//构造函数 new node()时候自动执行 {原创 2012-02-09 17:08:19 · 697 阅读 · 1 评论 -
处理字符串用到的函数
(1)函数名称: strdup 函数原型: char *strdup(const char *s) //函数参数是带const 的,貌似用数组定义的字符数组传不进来函数功能: 字符串拷贝,目的空间由该函数分配 函数返回: 指向拷贝后的字符串指针 参数说明: s是待拷贝的源字符串 所属文件: //#include#in原创 2012-02-07 21:20:28 · 383 阅读 · 0 评论 -
poj 1002 string字符串
通过这道题学了学的用法,但是本题还有很多解法,有时间一一搞一下。题意:有的字母对应这数字,找出给出的一些号码中重复的个数。参考的地址找不到了。#include#includeusing namespace std;int a[10001000];int check(char c){ if(c=='A'||c=='B'||c=='C') return 2; if(c转载 2012-02-04 12:38:56 · 363 阅读 · 0 评论 -
codeforces 字符串
C. Anagram Searchtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputA string t is called an anagram of the st原创 2012-01-30 11:52:56 · 636 阅读 · 0 评论 -
hdu 2752 KMP(前后缀)
题意:给出字符串,求所有既是前缀又是后缀的串的大小。思路:KMP的next[]应用。。例如题目给出的串 ababcababababcabab对应的next值 -1,0,0,1,2,0,1,2,3,4,3,4,3,4,5,6,7,8,9(next[18])next[18]=9,代表着位置18以前的既是前缀,又是后缀的串最大是9(不包括本身),然后找next[9]=4,也就是位原创 2012-01-18 02:03:52 · 780 阅读 · 0 评论 -
hdu 1358 KMP
题意:跟poj 2406差不多思路:KMP的 len%(len-next[len])应用 ,不过这次要从2到len循环 判断,然后一次输出。。#includeusing namespace std;int next[1000010];char s[1000010];int n;void get_next(){ int j=0,k=-1; next[0]=-1; wh原创 2012-01-18 02:01:14 · 385 阅读 · 0 评论 -
poj 3450 KMP+暴力枚举(类似于3080)
类似于3080 稍作改动,即可AC。。#includeusing namespace std;int next[205];char str[205];char ans[205];char s[5050][205];int h;int le;void get_next(char *T,int len){ int j=0,k=-1; next[0]=-1; while原创 2012-01-18 02:07:30 · 687 阅读 · 0 评论 -
poj 3080 KMP+暴力
题意:求给出字符串的公共子序列。。思路:把第一个字符串的子序列作为KMP的模式串,依次和其它的字符串匹配,求出长度最长的,如果长度相同的话,取字典序较小的。#includeusing namespace std;int next[65];char str[65];char ans[65];char s[15][65];int h;void get_next(char *T,i原创 2012-01-18 02:06:05 · 485 阅读 · 0 评论 -
hdu 1711 裸KMP
题意:基本是裸的KMP了 不解释了,但是有个地方需要注意下,如果不改就一直WA 不知道怎么回事,如果路过的高手知道的话,告诉我哈~#includeusing namespace std;int next[10010];int T[10010];int S[1000010];int m,n;void get_next(){ int j=0,k=-1; next[0]=-1原创 2012-01-18 02:02:31 · 529 阅读 · 0 评论 -
poj 1226 求多串最长公共子串 或 回文子串 KMP&&strstr&&后缀数组
题意:求给出的字符串中的最长公共子串 ,其中子串可以反转,比如rose 和 orchid , ro 和第一个匹配 , ro 的回文串or 和orchid 匹配 。最后输出最长子串的长度。思路:找出长度最小的子串, 枚举其所有子串 ,然后将其反转再保存 ,最后用这两个串去匹配其它的字符串。#include#include#includeusing namespace std;ch原创 2012-06-03 20:01:00 · 785 阅读 · 0 评论