Bazinga HDU
来源:互联网 发布:淘宝全屏优惠券代码 编辑:程序博客网 时间:2024/05/16 14:26
题意:
给你n(1<=n<=500)个长度最多为2000的字符串,现在让你找出最大的i使得存在j(1<=j
思路:
直接暴力比较每个字符串是不是当前考虑的这个字符串的子串,然后加上一个优化就是从最近的一个字符串开始,这个字符串满足其前面的字符串都是当前串的子串,然后还有就是如果待比较的字符串长度明显不满足直接返回false。然后判断是不斯匹配我写了一个KMP,不知道不用KMP能不能过
代码:
#include<cstring>#include<cctype>#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn=500+10;const int maxlen=2000+10;char str[maxn][maxlen];int kase=0;void solve();bool check(char * s,char * t);int main(){ int T; kase=0; scanf("%d",&T); while(T--){ kase++; solve(); } return 0;}void solve(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s",str[i]); } int ans=-1; int pre=1; bool flag; for(int i=2;i<=n;i++){ flag=true; for(int j=pre;j<i;j++){ if(!check(str[j],str[i])){ ans=max(ans,i); flag=false; break; } } if(flag){ pre=max(pre,i); } } printf("Case #%d: %d\n",kase,ans);}void getfail(char * s,int n,int * f);bool check(char * s,char * t){ int n=strlen(s),m=strlen(t); if(n>m) return false; static int fail[maxlen]; getfail(s,n,fail); int j=0; for(int i=0;i<m;i++){ while(j&&s[j]!=t[i]) j=fail[j]; if(s[j]==t[i]) j++; if(j==n) return true; } return false;}void getfail(char * s,int n,int * f){ f[0]=0; f[1]=0; int j=0; for(int i=1;i<n;i++){ j=f[i]; while(j&&s[j]!=s[i]) j=f[j]; if(s[j]==s[i]) j++; f[i+1]=j; }}
阅读全文
0 0
- Bazinga HDU
- HDU 5510 Bazinga
- HDU 5510 Bazinga(思维)
- hdu 5510 -Bazinga(kmp)
- hdu 5510 Bazinga(kmp)
- HDU 5510 Bazinga 【strstr】
- HDU-5510 Bazinga
- HDU 5510 Bazinga 【kmp】
- HDU 5510 Bazinga(KMP)
- HDU 5510 Bazinga(kmp)
- hdu 5510 Bazinga(高效)
- HDU-5510 Bazinga(枚举+剪枝)
- HDU 5510 Bazinga (KMP)
- HDU 5510 Bazinga(KMP)
- HDU-5510 Bazinga(KMP)
- HDU 5510 Bazinga (KMP)
- hdu 5510 Bazinga(KMP+剪枝)
- HDU 5510 Bazinga 多种姿势
- Spark常用调优方法
- HDU-1754 I Hate It
- Centos7.3部署etcd集群
- AIS系统建设中解析到的船舶航行状态说明
- POJ 1840 Eqs(哈希)
- Bazinga HDU
- 【C#】获取文件、目录下所有文件、子目录文件
- Android——Activity
- android lru缓存 辅助类LruCache源码解析
- spring cloud ribbon
- Java编程思想之枚举类型
- CNN详解
- hive函数参考手册
- 局部最小值位置