HDOJ 5510 Bazinga 【2015沈阳现场赛】字符串
2016-10-03 15:57
423 查看
给n(1≤n≤500)个字符串,求一个最大的i,使得存在一个Sj不是Si的子串。
这个题,用不用KMP其实意义不是太大,重点是如何把二维的循环减小到一维
跟二分答案的思路差不多:
维护两个指针l,r
那么有两种情况:
如果Sl是Sr的子串,那么l++。
如果Sl不是是Sr的子串,那么将答案更新为r,然后r++
考虑Sr+1的时候为什么同样不考虑Sl之前的串了呢?
因为Sl之前的串都是后面某个串的子串,所以如果他们中有不是Sr+1子串的串的话,那么一定有对应的那个串也不是Sr+1的子串。这样保证r一定能更新到ans
如何去判断是不是匹配反而不是那么难
KMP可以,strstr这个函数也可以
代码如下:
这个题,用不用KMP其实意义不是太大,重点是如何把二维的循环减小到一维
跟二分答案的思路差不多:
维护两个指针l,r
那么有两种情况:
如果Sl是Sr的子串,那么l++。
如果Sl不是是Sr的子串,那么将答案更新为r,然后r++
考虑Sr+1的时候为什么同样不考虑Sl之前的串了呢?
因为Sl之前的串都是后面某个串的子串,所以如果他们中有不是Sr+1子串的串的话,那么一定有对应的那个串也不是Sr+1的子串。这样保证r一定能更新到ans
如何去判断是不是匹配反而不是那么难
KMP可以,strstr这个函数也可以
代码如下:
#include<bits/stdc++.h> using namespace std; const int maxn=650; int n; char a[maxn][maxn*10]; bool b[maxn]; int main(){ //freopen("input.txt","r",stdin); int T; scanf("%d",&T); for(int Case=1;Case<=T;Case++){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%s",a[i]); for(int i=1;i<=n;i++) b[i]=false; int ans=-1; for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) if (b[j]==false){ if (strstr(a[j],a[i])!=NULL) break; else{ b[j]=true; ans=max(ans,j); } } printf("Case #%d: %d\n",Case,ans); } return 0; }
相关文章推荐
- HDU 5510 Bazinga (2015沈阳现场赛,子串判断)
- HDU-5510-Bazinga【2015沈阳赛区】【KMP】
- HDOJ 5514 Frogs 【2015沈阳现场赛】容斥原理
- HDOJ 5515 Game of Flying Circus 【2015沈阳现场赛】杂题(数学二分)
- HDU 5510(ACM 2015 沈阳)Bazinga [KMP]
- HDU 5510 2015ACM-ICPC沈阳赛区现场赛B题
- HDU 5510 Bazinga(2015亚洲区沈阳站现场赛)
- hdu 5510 Bazinga 2015ACM/ICPC亚洲区沈阳站现场赛
- HDOJ 5521 Meeting 【2015沈阳现场赛】图论
- HDOJ 5512 Pagodas 【2015沈阳现场赛】数论
- HDU 5510 Bazinga 字符串HASH (2015ACM/ICPC亚洲区沈阳站)
- [HDU 5510][2015ACM/ICPC 亚洲区沈阳站] Bazinga KMP+剪支
- 杭电acm 5510Bazinga(字符串)
- 【HDU 5510 Bazinga】字符串
- hdu 5510 Bazinga (kmp+dfs剪枝) 2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)
- 【hdu 5510】【2015ACM/ICPC亚洲区沈阳站-重现赛 】Bazinga 题意&题解&代码(C++)
- 【HDOJ5510】Bazinga(KMP)
- HDU 5521 2015ACM-ICPC沈阳赛区现场赛M题
- 2015沈阳现场赛F (HDU 5514)(经典问题 数论phi函数)
- 【HDU5510 2015沈阳赛区B】【KMP or strstr for循环剪枝】Bazinga 循环处思维灵活转化 时间复杂度均摊思想