hdu 5510 Bazinga(kmp)
来源:互联网 发布:搞笑词语网络流行语言 编辑:程序博客网 时间:2024/06/01 10:48
传送门:点击打开链接
题图没有半点毛关系。
题意:给出n个字符串,求出最大的i串(是i最大不是i串长度最大)使得存在j串不是i串的子串。
做法是用kmp来求是不是字串,再减枝,求出一个串是别的子串就不用再管它了,以后可以遍历比它长的串
代码如下:
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;#define N 510#define inf 2000000000000000llstruct rng{ char a[2010]; int len,Next[2010];}t[N];int vis[N];void getnext(int cnt){ int i,j; i=0,j=-1; t[cnt].Next[0]=-1; while(i<t[cnt].len) { if(j==-1||t[cnt].a[i]==t[cnt].a[j]) { j++,i++; t[cnt].Next[i]=j; } else j=t[cnt].Next[j]; } return ;}bool find(int x,int y){ int i=0,j=0; while(i<t[x].len){ if(j==-1||t[x].a[i]==t[y].a[j]){ j++; i++; } else j=t[y].Next[j]; if(j==t[y].len){ return 0; } } return 1;}int main(){ int T,i,j,n,m,k,kase=0; scanf("%d",&T); while(T--){ scanf("%d",&n); int flag1=0; memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) { scanf("%s",&t[i].a); t[i].len=strlen(t[i].a); getnext(i); for(j=1;j<=i-1;j++){ if(vis[j]) continue; if(find(i,j)==0) vis[j]=1; else flag1=i; } } printf("Case #%d: ",++kase); if(flag1) printf("%d\n",flag1); else printf("-1\n"); } return 0;}
1 0
- hdu 5510 -Bazinga(kmp)
- hdu 5510 Bazinga(kmp)
- HDU 5510 Bazinga 【kmp】
- HDU 5510 Bazinga(KMP)
- HDU 5510 Bazinga(kmp)
- HDU 5510 Bazinga (KMP)
- HDU 5510 Bazinga(KMP)
- HDU-5510 Bazinga(KMP)
- HDU 5510 Bazinga (KMP)
- hdu 5510 Bazinga(KMP+剪枝)
- HDU-5510-Bazinga【2015沈阳赛区】【KMP】
- Hdu 5510 Bazinga(KMP+尺取法)
- hdu 5510 Bazinga【KMP+暴力剪枝】
- HDU 5510 Bazinga (kmp + 小剪枝)
- hdu 5510 Bazinga 剪枝+find()/strstr()/KMP
- HDU 5510 Bazinga 双指针+KMP.
- hdu 5510Bazinga(kmp+思维)
- HDU 5510(ACM 2015 沈阳)Bazinga [KMP]
- 根据Gridview中选择的项 动态改变数据
- quickV3 Label setColor()相关Bug
- Rubymine的正确打开办法 :)
- linux umount 时出现device is busy 的处理方法--fuser
- ramdisk文件系统的介绍与制作
- hdu 5510 Bazinga(kmp)
- 数据分析告诉你,转化才是王道
- hdu5898odd-even number
- python3中标准库中模块的更名。
- Linux下修改Mysql的用户(root)的密码
- 程序员的成长日记-开篇
- 预处理命令总结
- ZOJ3070-The Colored Stones - 状态压缩dp
- 上架下架,修改js无页面刷新分页搜索