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基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一 ...
- java版微信支付/查询/撤销
最近公司接入微信刷卡支付,网上根本没见到很直接的教程(可能眼拙),一直摸滚打爬,加班加点才走通,忍不了必须写一写 微信 刷卡支付/查询/撤销... 必须要有公众号然后去申请,申请自己去看文档,这里主要 ...
- Java利用Base64编码和解码图片文件
1.编码与解码代码如下所示: import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import jav ...
- Consul服务发现在windows下简单使用
目录 基本介绍: 服务连接: 客户端: 系列章节: 回到顶部 基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent ...
- HTML文本格式化标签(Formatting)
<b>粗体文本</b> <code>计算机代码</code> <em>强调文本</em> <i>斜体文本</i ...
- nodejs 操作 mysql
1.安装插件 npm install mysql 2.调用代码 var mysql = require('mysql') var connection = mysql.createConnection ...
- mongodb 在 linux 中的安装和简单使用
一.环境介绍 1.mongodb版本: mongodb-linux-x86_64-rhel70-3.2.22 # 点击下载2.linux版本: Ubuntu 18.04.2 LTS 二.安装1.上传 ...
- Ansible 管理Windows 受控端
- TCP软件环境测试
利用合宙官网上的云平台->TCP透传云,建立一个TCP服务. http://tcplab.openluat.com/ [注意事项] 如3分钟内没有客户端接入则会自动关闭. 每个服务器最大客户端连 ...
- Linux架构之Nginx 七层负载均衡
第50章 Nginx七层负载均衡 一.Nginx负载均衡基本概述 1)为什么要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷.使用多台Web服务器组成集群, ...