HDU 5510 Bazinga (字符串匹配)
题目:传送门。
题意:t 组数据,每组 n 个串,对于第 i 个串如果存在 1 到 i-1 中的某个串不是 i 的子串,那么这个第 i 个串符合题意,求 i 的最大值。
题解:KMP,AC自动机也可以,直接匹配就行。注意如果串 j 是j+1的子串,那么对于j+2来说只需要匹配j+1是不是他的子串即可,因为比匹配 j 更容易符合题意。用cin会超时,要用scanf。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; char s[510][2050]; int main() { int t,cas=1; scanf("%d",&t); while(t--) { memset(s,0,sizeof(s)); int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%s",s[i]); int ans=-1,j=1; for(int i=2;i<=n;i++) { while(j<i&&strstr(s[i],s[j])) j++; if(j<i) ans=i; } printf("Case #%d: %d\n",cas++,ans); } return 0; }