| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
用的kmp,在航电交过了 ,在这里却过不了,哪位好心人能帮看看啊!不胜感机#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int p[105], l[105];
char pat[105], str[102][105];
int lpat, n;
void next()
{
int i, j;
p[0] = -1;
j = -1;
for (i=1; i<l[0]; i++)
{
while (j>=0 && pat[j+1] != pat[i])
j = p[j];
if (pat[j+1] == pat[i])
j++;
p[i] = j;
}
return ;
}
int kmp()
{
int i, j, k, m, Maxl;
Maxl = 101;
next();
for (i=1; i<n; i++)
{
j = -1; m = -1;
for (k=0; k<l[i]; k++)
{
while (j>=0 && str[i][k] != pat[j+1])
j = p[j];
if (str[i][k] == pat[j+1])
j++;
if (j>m)
m = j;
}
for (k=l[i]-1; k>=0; k--)
{
while (j>=0 && str[i][k] != pat[j+1])
j = p[j];
if (str[i][k] == pat[j+1])
j++;
if (j>m)
m = j;
}
if (m<Maxl)
Maxl = m;
}
return Maxl+1;
}
int main()
{
int t, i, value, ans;
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
for (i=0; i<n; i++)
{
scanf("%s", str[i]);
l[i] = strlen(str[i]);
}
//cout<<"AAAAAAA"<<endl;
ans = 0;
for (i=0; i<l[0]; i++)
{
strcpy(pat, str[0]+i);
lpat = l[0] - i;
value = kmp();
if (value > ans)
ans = value;
}
printf("%d\n", ans);
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator