HDU 5510 Bazinga
来源:互联网 发布:淘宝阿里妈妈在哪里 编辑:程序博客网 时间:2024/06/04 18:16
题意:给出n个字符串,求满足条件的最大下标值或层数
条件:第I个字符串之前存在不是(第i字符串的子串)的字符串
直接暴力好了,如果第i个字符串是i之后的字符串的子串,那么标记vis[i] = false,下次再询问的时候就可以跳过了。
求s串是否是a串的子串可以用KMP算法
#include <string>#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int f[2005];char s[505][2005];bool vis[505];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; }}int find(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, n, i, res, k, j, now, tp; scanf("%d", &t); k = 1; while(t--) { memset(vis, 0, sizeof vis); res = -1; now = 0; tp = 0; scanf("%d", &n); for(i = 0;i < n;i++) { scanf("%s", s[i]); for(j = 0;j <= i - 1;j++){ if(vis[j]) continue; if(find(s[i], s[j])) vis[j] = 1; else res = i; } } if(res != -1) res++; printf("Case #%d: %d\n", k++, res); }}
0 0
- 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 多种姿势
- Bazinga HDU
- ubuntu Java路径
- 大数自增
- IBinder接口
- zc702-自定义AXI-IP核实验
- 树---求二叉树两个节点的距离
- HDU 5510 Bazinga
- 使用Quartz创建定时任务
- NYOJ 722 数独
- 重装ubuntu 14.04记录笔记
- Quartz 2D学习(二)绘制曲线
- kvc机制与kvc的常用方法
- 我的JAVA之路(一)
- mybatis注解详解
- SQL语句的分类