题意:给定n个字符串,求出满足条件:存在j<i且串j不是串i的字串,最大的数i。
直接暴力超时,需要剪枝。
如果判断出串A是串B的字串,下次就可以不用判断A了。因为如果串B是串C的字串,那么串A一定也是串C的字串。
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
char a[503][2003];
int visit[503];
int main()
{
int T,n,ans,cas=1;
scanf("%d",&T);
while(T--)
{
memset(visit,0,sizeof(visit));
scanf("%d",&n);
ans=-1;
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]);
for(int j=i-1;j>0;j--)
{
if(visit[j])
continue;
if(strstr(a[i],a[j])==NULL)
ans=i;
else
visit[j]=1;
}
}
printf("Case #%d: %d\n",cas++,ans);
}
}