HDU 5510 Bazinga 【kmp】
来源:互联网 发布:小众 视频编辑软件 编辑:程序博客网 时间:2024/06/05 10:51
点击打开链接
题意:
给你n个串。问你满足一个串不完全包含前面的所有串的串的编号最大的串的编号是多少。
题解:
那就暴力匹配,从前往后枚举每个串,然后对于每个串,再从后往前挨个匹配。
如果包含前面的串,就直接覆盖,这样原串长度都不会很长,
另外匹配时候用kmp。
#include <bits/stdc++.h>#define ll long longusing namespace std;const int maxn=2020;int nxt[maxn];// 前缀函数,与多数教科书上略有不同这里是从0开始不是1开始void prefix(char s[], int*pre){ pre[0] = 0; for(int i = 1, k = 0;s[i];++ i) { while(k > 0 && s[k] != s[i]) k = pre[k-1]; if(s[k] == s[i]) ++ k; pre[i] = k; }}//x主串,y模式串int KMP(char* x, char * y){ //cout<<x<<" "<<y<<endl; int m = strlen(y), j = 0, i; int* pre = new int [m]; // 如有必要静态建立 prefix(y, pre); // 这里避免重复求统一串前缀 for(i = 0;x[i];++ i) { while(j > 0 && y[j] != x[i]) j = pre[j - 1]; if(y[j] == x[i]) ++ j; if(!y[j]) { delete [] pre; return 1; } } delete [] pre; return 0;}char a[505][maxn];int main(){ int t,len1,len2; int n,cnt,ca=0,ans,f,j,q; scanf("%d",&t); while(t--){ scanf("%d",&n); char s[maxn]; ans=-1; a[0][0]='9';a[0][1]='\0'; cnt=1,q=0; for(int i=1;i<=n;++i){ if(++q>n) break; scanf("%s",s); if(i==1){strcpy(a[1],s);continue;} j=cnt; while(KMP(s,a[j])){ j--; } if(a[j][0]!='9')ans=i; cnt=j+1; strcpy(a[cnt],s); } printf("Case #%d: %d\n",++ca,ans); } return 0;}
阅读全文
0 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]
- Rspamd_rule_frame
- CentOS6 使用yum来安装mysql5.7
- maven浅谈
- 蓝桥杯 ADV-78 算法提高 最长单词
- 夯实JAVA之泛型详解一代宗师篇
- HDU 5510 Bazinga 【kmp】
- 使用Java实现简单串口通信
- 蓝桥杯 ADV-77 算法提高 统计平均成绩
- java电信数据采集系统
- 搭建TypeScript开发环境
- Java串口编程:串口数据的发送与监听读取
- JS实现jQuery的addClass, removeClass, hasClass函数功能
- 关注民生民情——华北水利水电大学“情艺”小孟庄社区调查
- 被自己蠢哭