Bazinga
Bazinga
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 593 Accepted Submission(s): 241
Don't tilt your head. I'm serious.

For n 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 string Si is another string that occurs in Si. For example, ``ruiz" is a substring of ``ruizhang", and ``rzhang" is not a substring of ``ruizhang".
For each test case, the first line is the positive integer n (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 than 2000 letters.
题意:n个字符串,s[i] (1≤i≤n),找到最大的i,是得存在j(1≤j<i)使得,s[j]不是 s[i]的子串。
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std; char s[550][2200];
int Next[550][2200]; int Judge(int w, int o)
{
int i = 0 , j = 0;
int l1, l2;
l1 = strlen(s[w]);
l2 = strlen(s[o]); while(i < l1 && j < l2)
{
if(s[w][i] == s[o][j] || i == -1)
{
i++;
j++;
}
else
i = Next[w][i]; if(i == l1)
{
return true;
}
}
return false;
} void getNext(int q)
{
int j, k;
int i = strlen(s[q]);
j = 0;
k = -1;
Next[q][0] = -1; while(j < i)
{
if(k == -1 || s[q][j] == s[q][k])
{
j++;
k++;
Next[q][j] = k;
}
else
k = Next[q][k];
}
} int main()
{
int t, n, index, l = 1;
scanf("%d", &t); while(t--)
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%s", s[i]);
getNext(i);
}
index = -1;
int q;
for(int i = n-2; i >= 0; i--)
{
if(!Judge(i, i+1)) 找到一个字符串不满足前后是子串关系后,从后向前找最大的不满足子串的串
{
q = i;
for(int j = n-1; j > q; j--)
{
if(!Judge(q, j))
index = index > j ? index : j;
}
}
}
if(index == -1)
printf("Case #%d: %d\n", l++, index);
else
printf("Case #%d: %d\n", l++, index+1);
}
return 0;
}
strstr阔以考虑……脉动回来
学长递归写法……
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std; int n, num;
char s[550][2200]; void slove(int k)
{
if(k == 0 || num == n-1)
return ;
if(strstr(s[k], s[k-1]))
slove(k-1); // 向下寻找
else
{
for(int i = n-1; i >= num; i--) // 找最大的 下标
{
if(strstr(s[i], s[k-1]) == 0)
{
num = i;
break; //
}
}
slove(k-1); // 继续向下寻找看是否有 存在 k 使 num 最大
}
} int main()
{
int t, l = 1;
scanf("%d", &t); while(t--)
{
scanf("%d", &n);
num = -1;
for(int i = 0; i < n; i++)
scanf("%s", s[i]);
slove(n-1);
printf("Case #%d: %d\n", l++, num == -1 ? num : num+1);
}
return 0;
}
Bazinga的更多相关文章
- HDU 5510 Bazinga (2015沈阳现场赛,子串判断)
Bazinga Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- HDU 5510 Bazinga 暴力匹配加剪枝
Bazinga Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5510 ...
- hdu 5510 Bazinga(字符串kmp)
Bazinga Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- Bazinga HDU 5510 Bazinga(双指针)
Bazinga HDU 5510 Bazinga(双指针) 题链 解法:对于串i来说,如果串i是不符合的,那么代表串i之前的字符串都是i的子串,那么我们求一个新的i(定义为ti),如果i是ti 的子串 ...
- HDU 5510:Bazinga(暴力KMP)
http://acm.hdu.edu.cn/showproblem.php?pid=5510 Bazinga Problem Description Ladies and gentlemen, p ...
- TTTTTTTTTTTTTTTT hdu 5510 Bazinga 字符串+哈希
Bazinga Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- Bazinga means
Bazinga means Bazinga https://www.dictionary.com/e/slang/bazinga/ refs xgqfrms 2012-2020 www.cnblogs ...
- HDU 5510 Bazinga (字符串匹配)
题目:传送门. 题意:t 组数据,每组 n 个串,对于第 i 个串如果存在 1 到 i-1 中的某个串不是 i 的子串,那么这个第 i 个串符合题意,求 i 的最大值. 题解:KMP,AC自动机也可以 ...
- [HDOJ5510]Bazinga(并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 普通集合会tle,换高贵的并查集. #include <algorithm> #in ...
随机推荐
- Nginx/Nginx基础学习
Nginx与node.js 一.Nginx与Node.js Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡. ...
- curl基本用法
curl 是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面. 以下是博主整理的一些关于curl命令的基本用法. -A/--user-age ...
- 为企业服务器配置RAID0、raid1、 raid10、raid5、raid6、等常见RAID
RAID卡操作手册先从开机启动时如何进入管理界面开始介绍: 1)当机器开启后,显示器出现阵列卡检测信息时,会提示用户是否要进入管理界面对阵列卡进行操作,此时按下Ctrl + H 即可,如下图 2)按下 ...
- [Jupyter Notebook] 01 这么多快捷键,我可顶不住!先记个八成吧
0. 一些说明 为了入门 Python3 安装了 Anaconda,它集成了 Jupyter Notebook 1. 调出快捷键表 打开 Jupyter Notebook,新建一个 Python3(我 ...
- Oracle 查看一个数据库实例下面所有的表大小
1. 因为 oracle有一些 lob字段 在user_extents 里面取出来的结果不是表名, 所以需要与user_lobs 表做关联查询才可以 本来想通过 关联查询来实现, 发现字表查询更简单 ...
- redis进阶知识
原文地址:https://my.oschina.net/u/4052893/blog/3001173 一.缓存雪崩 1.1什么是缓存雪崩? 回顾一下我们为什么要用缓存(Redis): 现在有个问题,如 ...
- 对于出现拒绝访问root用户的解决方案
提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql' 由于使用mysql -u root ...
- css水平垂直居中问题
水平居中: 行内元素:text-align:center; 块级元素:magin:0 auto; 子元素设置:position:absolute; left:50%; transform:tran ...
- [转载]Quartus ii 一些Warning/Eeror分析与解决
我会在此基础上继续添加 原文地址:ii 一些Warning/Eeror分析与解决">Quartus ii 一些Warning/Eeror分析与解决作者:yanppf 注:http:// ...
- mongo配置
cmd下操作 cd /d E:\MongoDB\bin 创建数据库: mongod --dbpath E:\MongoDB\data\db 验证是否成功,登陆localhost:27017 进入E:\ ...