hdu 5510 KMP+暴力
来源:互联网 发布:服务器坏了 raid 数据 编辑:程序博客网 时间:2024/06/05 01:09
Bazinga
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 6175 Accepted Submission(s): 1905
Problem Description
Ladies and gentlemen, please sit up straight.
Don't tilt your head. I'm serious.
Forn 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 stringSi is another string that occurs in Si . For example, ``ruiz" is a substring of ``ruizhang", and ``rzhang" is not a substring of ``ruizhang".
Don't tilt your head. I'm serious.
For
A substring of a string
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 integern (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 than2000 letters.
For each test case, the first line is the positive integer
All strings are given in lower-case letters and strings are no longer than
Output
For each test case, output the largest label you get. If it does not exist, output −1 .
Sample Input
45ababczabcabcdzabcd4youlovinyouaboutlovinyouallaboutlovinyou5dedefabcdabcdeabcdef3abaccc
Sample Output
Case #1: 4Case #2: -1Case #3: 4Case #4: 3
题目描述: 给你一串字符串 让你判断第几个字符串满足它前面有至少一个字符串不是它的子字符串
思路:对字符串的处理KMP很好想到 然后直接暴力会超时 所以要进行一些优化 可以在读入的时候就进行比较 如果前面是后面的子字符串
就进行标记 最后再求没有标记的
#include<iostream>#include<cstdio>#include<cstring>using namespace std;struct S{ char str[2005];};int f[2005];//后缀数组void getfill(char s[])//计算后缀数组{ memset(f, 0, sizeof(f)); int len = strlen(s); for(int i = 1;i < len;i++) { int j = f[i]; while(j&&s[i] != s[j]) j = f[j]; f[i+1] = (s[i] == s[j])?j+1:0; }}//判断s是否为a的子串int fin(char a[], char s[]){ getfill(s); int j = 0; int lena = strlen(a); int lens = strlen(s); for(int i = 0;i < lena;i++) { while(j&&a[i]!=s[j]) j = f[j]; if(a[i]==s[j]) j++; if(j == lens) return 1; } return 0;}int main(){ int t; scanf("%d",&t); S r[505]; int v[2005]; int m = 0; while(t--){ int n; memset(v,1,sizeof(v)); m++; scanf("%d",&n); for(int i = 0; i < n; i++) { scanf("%s",r[i].str); } for(int i = 1; i < n;i++) if(fin(r[i].str,r[i-1].str)) v[i-1] = 0; int i,j; bool flag = false; for(i = n-1 ;i>=0&&!flag;i--) for(j=0;j<i&&!flag;j++) { if(v[j]) //优化时间 if(!fin(r[i].str,r[j].str)) { printf("Case #%d: %d\n",m,i+1); flag = true ; } } if(!flag) printf("Case #%d: -1\n",m); } return 0;}
阅读全文
0 0
- hdu 5510 KMP+暴力
- hdu 5510 Bazinga【KMP+暴力剪枝】
- hdu 5918 暴力kmp
- HDU 2087 (KMP||暴力)
- hdu 4150 Powerful Incantation 暴力||KMP
- HDU 2328 Corporate Identity (暴力 | kmp)
- HDU 3689 (KMP+DP || 暴力+dp)
- HDU 1238 Substrings kmp暴力枚举
- HDU 1238 Substrings(KMP+暴力枚举)
- HDU 1238 Substrings(KMP+暴力枚举)
- Hdu 4763 Theme Section (KMP+暴力 或 exKMP)
- HDU-5918 Sequence I(暴力)(KMP)
- hdu 4552 怪盗基德的挑战书【KMP+dp || 优雅暴力】
- HDU 5510 KMP
- hdu 5510 -Bazinga(kmp)
- hdu 5510 Bazinga(kmp)
- HDU 5510 Bazinga 【kmp】
- HDU 5510 Bazinga(KMP)
- 傻杯1.0
- java中的jdbc
- java中的内存泄漏
- HDU-6249-Alice’s Stamps
- RevitAPI之创建文字和注释【比目鱼原创】
- hdu 5510 KMP+暴力
- [DP] TopCoder SRM548 Div1 450. KingdomAndDice
- 微信公众号插入地图及地图搜索资源的前端处理(坐标系转码,自动定位等业务实现)
- 剑指offer—构建乘积数组
- 服务器端的应用及服务,监控管理
- 关于dp和记忆化搜索
- JDK1.8的新特性之Lambda表达式的应用
- 论文笔记【Local-DPP: An improved DNA-binding protein prediction method by exploring local evolutionary】
- jzoj5498 【清华集训2017模拟12.10】大佬的难题 巧妙容斥