2015 沈阳区域赛现场赛 B—Bazinga【暴力】
http://acm.hdu.edu.cn/showproblem.php?pid=5510
题意:
给你几组字符串,找到前面的字符串存在不是自己的子串的串标号的最大值
分析:
如果用kmp有可能会超时,暴力时间反而很短
假的KMP
代码:
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
char s[550][2005];
int vis[550];
int solve(char *fa,char *son)
{
int n = strlen(fa);
int m = strlen(son);
int i = 0; // 主串的索引
int j = 0; // 字串的索引
while (i < n && j < m) {
if (son[j] == fa[i]) {
i++;
j++;
} else {
i = i - j + 1; // 这句是关键
j = 0;
}
}
if (j == m) {
return i - j;
}
else {
return -1;
}
return -1;
}
int main()
{
int t;scanf("%d",&t);
for(int cas=1;cas<=t;cas++)
{
memset(vis,0,sizeof(vis));
int n;scanf("%d",&n);
int flag = 0;
for(int i=1;i<=n;i++)
{
scanf("%s",s[i]);
for(int j=i-1;j>=1;j--)
{
if(vis[j])continue;
if(solve(s[i],s[j])==-1){flag=i;break;}
else vis[j]=1;
}
}
if(!flag)
printf("Case #%d: -1\n",cas);
else
printf("Case #%d: %d\n",cas,flag);
}
}