Theme Section(KMP应用 HDU4763)
来源:互联网 发布:测试常用的linux命令 编辑:程序博客网 时间:2024/05/01 04:50
Theme Section
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1995 Accepted Submission(s): 943
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?
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
5
xy
abc
aaa
aaaaba
aaxoaaaaa
Sample Output
0
0
1
1
2
Source
2013 ACM/ICPC Asia Regional Changchun Online
#include <map>#include <set>#include <queue>#include <cstring>#include <string>#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;const int MAX = 1e6+100;char str[MAX];int Next[MAX];void GetNext()//KMP得到Next数组{ int len=strlen(str); Next[0]=-1; int i=1,j=0; while(i<len) { if(j==-1||str[i]==str[j]) { i++; j++; Next[i]=j; } else { j=Next[j]; } }}int Judge(int len){ int Len=strlen(str); int i=len,j=0; while(i<Len-len) { if(j==-1||str[i]==str[j]) { i++; j++; } else { j=Next[j]; } if(j==len) { return len; } } return -1;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%s",str); int len=strlen(str); if(len<3) { printf("0\n"); continue; } GetNext(); int R=strlen(str); int Max=-1; while(Next[R]>=0) { if(Next[R]>Max) { int ans=Judge(Next[R]); if(ans>Max) { Max=ans ; break; } } R=Next[R]; } if(Max==-1) { printf("%d\n",Max+1); } else printf("%d\n",Max); } return 0;}
- Theme Section(KMP应用 HDU4763)
- HDU4763 Theme Section KMP-next应用
- hdu4763 Theme Section KMP
- hdu4763 Theme Section (KMP)
- HDU4763 Theme Section 【KMP】
- HDU4763 Theme Section KMP
- HDU4763 - Theme Section(KMP)
- hdu4763 Theme Section(kmp)
- HDU4763 Theme Section(KMP+扩展KMP)
- HDU4763-Theme Section(KMP+二分)
- hdu4763 Theme Section(KMP水题)
- hdu4763---Theme Section
- HDU4763 Theme Section
- HDU4763 Theme Section(next数组__kmp+扩展)
- hdu 4763 Theme Section (kmp next应用)
- hdu4763(KMP的应用)
- hdu_4763 Theme Section KMP
- KMP Theme Section HDU
- 记单词工具拓展引起的选中即复制想法
- 笔试真题解析 TT 研发工程师笔试卷
- UIKit 力学教程
- Hive 1.1.1 启动错误
- 数据结构——堆
- Theme Section(KMP应用 HDU4763)
- 嵌入式linux程序之调试方法
- 常用数据类型对应字节数
- HDU 1113 Word Amalgamation -- 字符串处理+排序
- 剑指offer:顺时针打印矩阵
- C++中的虚基类
- 软肋
- 正则表达式
- iPhone第四节:UIDatePicker、UIPickerView