Problem Description
Ladies and gentlemen, please sit up straight. Don't tilt your head. I'm serious.
![](http://acm.hdu.edu.cn/data/images/C645-1002-1.jpg)
For n given strings S1,S2,⋯,Sn, labelled from 1 to n, you should find the largest i (1≤i≤n) such that there exists an integer j (1≤j<i) and Sj is not a substring of Si. A substring of a string Si is another string that occurs in Si. For example, ``ruiz" is a substring of ``ruizhang", and ``rzhang" is not a substring of ``ruizhang".
Input
The first line contains an integer t (1≤t≤50) which is the number of test cases. For each test case, the first line is the positive integer n (1≤n≤500) and in the following n lines list are the strings S1,S2,⋯,Sn. All strings are given in lower-case letters and strings are no longer than 2000 letters.
Output
For each test case, output the largest label you get. If it does not exist, output −1.
Sample Input
4 5 ab abc zabc abcd zabcd 4 you lovinyou aboutlovinyou allaboutlovinyou 5 de def abcd abcde abcdef 3 a ba ccc
Sample Output
Case #1: 4 Case #2: -1 Case #3: 4 Case #4: 3
Source
题意:你需要找到一个最大的i使得,存在一个在他前面的字符串不是他的子串
直接暴力也能过,这是区域赛吗?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<math.h> 7 #include<algorithm> 8 #include<queue> 9 #include<set> 10 #include<bitset> 11 #include<map> 12 #include<vector> 13 #include<stdlib.h> 14 #include <stack> 15 using namespace std; 16 #define PI acos(-1.0) 17 #define max(a,b) (a) > (b) ? (a) : (b) 18 #define min(a,b) (a) < (b) ? (a) : (b) 19 #define ll long long 20 #define eps 1e-10 21 #define MOD 1000000007 22 #define N 506 23 #define M 2006 24 #define inf 1e12 25 int n; 26 char s[N][M]; 27 int vis[N]; 28 int main() 29 { 30 int t; 31 int ac=0; 32 scanf("%d",&t); 33 while(t--){ 34 memset(vis,0,sizeof(vis)); 35 scanf("%d",&n); 36 int ans=-1; 37 for(int i=1;i<=n;i++){ 38 scanf("%s",s[i]); 39 for(int j=i-1;j>=1;j--){ 40 if(vis[j]) continue; 41 if(strstr(s[i],s[j])==0) ans=i; 42 else vis[j]=1; 43 } 44 } 45 46 printf("Case #%d: ",++ac); 47 48 if(ans==-1){ 49 printf("-1 "); 50 }else{ 51 printf("%d ",ans); 52 } 53 } 54 return 0; 55 }