hdoj 5510 Bazinga 【不要想太多。。。 strstr】
2015-10-31 18:27
288 查看
BazingaTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 72 Accepted Submission(s): 28 Problem Description Ladies and gentlemen, please sit up straight. Don't tilt your head. I'm serious. 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 |
不要想太多,弱渣ac自动机TLE到死 o(╯□╰)o
AC代码:
#include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> #include <map> #include <queue> #include <stack> #include <string> #include <vector> #define lson o<<1|1, l, mid #define rson o<<1, mid+1, r #define ll o<<1 #define rr o<<1|1 #define INF 0x3f3f3f3f #define eps 1e-8 #define debug printf("1\n") #define MAXN 100010 #define MAXM 20000000 #define LL long long #define CLR(a, b) memset(a, (b), sizeof(a)) #define W(a) while(a--) #define Ri(a) scanf("%d", &a) #define Pi(a) printf("%d\n", (a)) #define Rl(a) scanf("%lld", &a) #define Pl(a) printf("%lld\n", (a)) #define Rs(a) scanf("%s", a) #define Ps(a) printf("%s\n", (a)) #define MOD 1000000007 #define LL long long using namespace std; char str[510][2010]; int main() { int t, kcase = 1; Ri(t); W(t) { int n; Ri(n); for(int i = 0; i < n; i++) Rs(str[i]); int ans = -2; for(int i = n-1; i > 0; i--) { if(!strstr(str[i], str[i-1])) { ans = max(ans, i); for(int j = i+1; j < n; j++) if(!strstr(str[j], str[i-1])) ans = max(ans, j); } } printf("Case #%d: %d\n", kcase++, ans+1); } return 0; }
相关文章推荐
- 从源码看Android】01从Looper说起
- Python XML的解析与创建
- lightoj 1071 - Baker Vai 【最大费用最大流】
- iOS开发:定时器与滚动视图的交互
- a kind of async programming in c#, need to reference definition
- HDU 5521 Meeting (最短路)
- 11月计划
- keepalived详解 结合lvs
- POJ 2398 Toy Storage
- 16道嵌入式c语言面试题
- jquery $(document).ready() 与window.onload的区别
- hdu4932 Miaomiao's Geometry
- Test Markdown Editor
- [LeetCode] Bulls and Cows
- Android View视图层次
- 16道嵌入式c语言面试题
- 12. Xcode7 使用http
- java反射机制
- C++类和继承
- 事件扩展