pku 2752 取名的小猫 (kmp)
来源:互联网 发布:富甲天下3 mac 编辑:程序博客网 时间:2024/05/01 21:47
题目:点击打开链接
终于学会kmp了。
嘻嘻嘻。
不过比这更高兴的是看小姐姐学习看了一晚上。
好了,小姐姐走了,整理下第一个用kmp写的题。(求小猫起名字?pku的背景都这么怪异?)
就是看这篇看会的(写的很棒):http://www.61mon.com/index.php/archives/183/
#include<stdio.h>#include<string.h>const int max=400005;char str[max];int len,next[max],ans[max]; /* 生成next数组,记录的是第i个字符之前的序列的 最长序列前后缀长度*/void get_next(){ int i=0,j=-1; next[0]=-1; while(i<len){ if(j==-1||str[i]==str[j]){ /*首尾作比较,相同再比较下一个。*/ i++; /*-1的时候是这个字符与第一个相同,后面开始[i]==[j]的时候就存入next*/ j++; /*首字符不一样时,每次做完这个j都是变为0的,以至于可以进行下一个的判断*/ next[i]=j; } else j=next[j]; /*判断这个i是不会艹的,但可以让j变成-1,然它能进行if语句进行next的赋值。*/ } /*而且这句else一旦不一样时可以慢慢倒回去,直到倒到-1为止(但一个一个往回倒,这有点蠢啊)*/}main(){ while(scanf("%s",str)!=EOF){ len=strlen(str); get_next(); /*for(int i=0;i<=18;i++) printf("%d=%d\n",i,next[i]);*/ ans[0]=len; int n=0,i=len; while(next[i]>0){ /*我去,这个可以啊,最长前后缀序列里的最长前后缀序列一定是原字符串的前后缀序列(好绕)*/ ans[++n]=next[i]; /*充分利用next数组*/ i=next[i]; //printf("%d\n",next[i]); } for(i=n;i>=0;i--) printf("%d ",ans[i]); printf("\n"); }}
阅读全文
0 0
- pku 2752 取名的小猫 (kmp)
- pku 3461 Oulipo(KMP)
- PKU 2406(KMP算法的灵活应用)
- pku 2752 Seek the Name, Seek the Fame(KMP)
- HDU和PKU的一些KMP题
- pku 1961 Period(KMP扩展)
- pku 2406 Power Strings(KMP)
- pku 3167 Cow Patterns(kmp)
- Pku oj 3461 Oulipo(kmp)
- pku 3461 Oulipo (裸kmp匹配)
- 网上搜集的取名大全(部分)
- pku kmp题目小结
- KMP PKU 3461
- KMP PKU 2406
- 楚辞的取名学
- 楚辞取名(完结)
- 取名
- 取名
- 【docker】--服务
- P2597 [ZJOI2012]灾难
- 19.实现多点触摸画圆(拖动+检测手机多点触摸的点数+随机颜色)
- 使用Scrapy爬取顶点小说整个网站的小说,入库Mysql!
- shell脚本报错
- pku 2752 取名的小猫 (kmp)
- 【MySQL】——主从模式及复制
- 剑指Offer----斐波那契数列
- Linux-01安装VMware
- swift 3.0 类的构造函数
- Qt 中关于菜单栏 QMenuBar 中 QMenuBarExtension 的qss 样式
- 微信小程序菜单实现
- 刷题记录-luoguP1341 无序字母对
- C++编程规范: 用Vector和string代替数组