HDU 4763 (KMP)
来源:互联网 发布:建筑作品集知乎 编辑:程序博客网 时间:2024/05/18 03:41
Theme Section
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2721 Accepted Submission(s): 1248
Problem Description
It's time for music! A lot of popular musicians are invited to join us in the music festival. Each of them will play one of their representative songs. To make the programs more interesting and challenging, the hosts are going to add some constraints to the rhythm of the songs, i.e., each song is required to have a 'theme section'. The theme section shall be played at the beginning, the middle, and the end of each song. More specifically, given a theme section E, the song will be in the format of 'EAEBE', where section A and section B could have arbitrary number of notes. Note that there are 26 types of notes, denoted by lower case letters 'a' - 'z'.
To get well prepared for the festival, the hosts want to know the maximum possible length of the theme section of each song. Can you help us?
To get well prepared for the festival, the hosts want to know the maximum possible length of the theme section of each song. Can you help us?
Input
The integer N in the first line denotes the total number of songs in the festival. Each of the following N lines consists of one string, indicating the notes of the i-th (1 <= i <= N) song. The length of the string will not exceed 10^6.
Output
There will be N lines in the output, where the i-th line denotes the maximum possible length of the theme section of the i-th song.
Sample Input
5xyabcaaaaaaabaaaxoaaaaa
Sample Output
00112
题意:求一个串的最长的相等的前缀和后缀,这个前缀和后缀不能相交。
因为如果可以相交的话求最长前缀和后缀非常容易,所以稍微处理一下使得最长前缀和后
缀不会交就可以了,就是中间加一个都不能匹配的字符。然后就能直接next[n]求出这个
最大前缀的长度了。
#include <cstring>#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cmath>using namespace std;#define maxn 1111111char T[maxn], P[maxn];int n, m;#define next Nextint next[maxn];void get_next (char *p) { int m = strlen (p); int t; t = next[0] = -1; int j = 0; while (j < m) { if (t < 0 || p[j] == p[t]) {//匹配 j++, t++; next[j] = t; } else //失配 t = next[t]; } } int main () { int t; cin >> t; while (t--) { scanf ("%s", T); n = strlen (T); if (n&1) T[n>>1] = '*'; else { for (int i = n-1; i >= n/2; i--) T[i+1] = T[i]; n++; T[n>>1] = '*'; T[n] = '\0'; } get_next (T); cout << next[n] << "\n"; } return 0;}
0 0
- HDU 4763 拓展KMP
- HDU 4763 KMP算法...
- HDU 4763 (KMP)
- HDU 4763 KMP/EXKMP
- HDU 4763 kmp
- KMP-hdu-4763-Theme Section
- hdu 4763 Theme Section(KMP)
- hdu 4763 Theme Section kmp
- HDU 4763 Theme Section(KMP)
- hdu 4763 Theme Section(KMP)
- hdu 4763 Theme Section KMP
- hdu 4763 扩展的KMP
- HDU 4763 Theme Section(KMP)
- hdu 4763 Theme Section(KMP)
- HDU - 4763 Theme Section KMP
- Hdu 4763 Theme Section KMP
- hdu-4763 kmp next数组的应用
- hdu 4763 Theme Section (扩展kmp)
- poj 1852 Ants(贪心)
- iOS开发中那些高效常用的宏
- CSV文件简单操作
- 编程之美3.6——编程判断两个链表是否相交
- hibernate双向1-N关联,但不能根据主表查从表的信息
- HDU 4763 (KMP)
- [__NSCFNumber length]: unrecognized selector sent to instance
- iOS本地数据存取
- C语言中 strchr() strncpy()的用法 以及根据某个字符切割字符串
- js日期/时间比较函数,以及js校验表单后提交表单的三种方法,表单验证,以及三种结合
- linux中unzip命令的使用详解
- java日志记录之Logger.getLogger()和LogFactory.getLog()的区别
- MyEclipse 启动 Tomcat 速度慢
- RecyclerView使用详解