您的位置:首页 > 其它

HDU 5510 Bazinga

2015-10-31 18:59 351 查看

Bazinga

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 101 Accepted Submission(s): 41


[align=left]Problem Description[/align]
Ladies and gentlemen, please sit up straight.
Don't tilt your head. I'm serious.

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2010;
int fail[maxn];
void getFail(char str[]) {
for(int i = 0,j = fail[0] = -1; str[i]; ++i) {
while(j != -1 && str[i] != str[j]) j = fail[j];
fail[i + 1] = ++j;
}
}
bool match(char sa[],char sb[]) {
getFail(sa);
for(int i = 0,j = 0; sb[i]; ++i) {
while(j != -1 && sb[i] != sa[j]) j = fail[j];
if(!sa[++j]) return true;
}
return false;
}
char S[501][maxn];
bool invalid[501];
int main() {
int kase,n,cs = 1;
scanf("%d",&kase);
while(kase--) {
scanf("%d",&n);
memset(invalid,false,sizeof invalid);
for(int i = 0; i < n; ++i) {
scanf("%s",S[i]);
if(i && match(S[i-1],S[i]))
invalid[i-1] = true;
}
int ret = -1;
for(int i = n-1; i >= 0 && ret == -1; --i) {
for(int j = 0; j < i && ret == -1; ++j) {
if(invalid[j]) continue;
if(!match(S[j],S[i])) ret = i + 1;
}
}
printf("Case #%d: %d\n",cs++,ret);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: