【HDOJ5510】Bazinga(KMP)
题意:给定n个由小写字母组成的字符串,第i个字符串为a[i],求最大的j满足存在1<=i<j,a[i]不是a[j]的子串,无解输出-1
T<=50,n<=500,len[i]<=2000
思路:队友写的,抱大腿
判断某个串是否是另一个串的子串可以使用KMP
有一个优化:若a[i-1]是a[i]的子串,则将a[i-1]标记,后面不需要再枚举它
队友的写法是把连续一段缩成了一个
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn=;
char s[maxn][maxn<<];
int nxt[maxn][maxn<<];
int len[maxn];
int p[maxn];
void getnext(int x)
{
int i=; int j=;
nxt[x][]=;
int n=len[x];
while(j<=n)
{
if(!i||s[x][i]==s[x][j])
{
i++; j++;
nxt[x][j]=i;
}
else i=nxt[x][i];
}
}
int kmp(int x,int y)
{
int i=; int j=;
int m=len[x];
int n=len[y];
while(j<=m)
{
if(!i||s[y][i]==s[x][j])
{
i++; j++;
if(i>n)
{
return ;
}
}
else i=nxt[y][i];
}
return ;
}
int main()
{
int T;
scanf("%d",&T);
int cas=;
while(T--)
{
int n;
scanf("%d",&n);
memset(s,,sizeof(s));
for(int i=;i<=n;i++)
{
scanf("%s",s[i]+);
len[i]=strlen(s[i]+);
getnext(i);
}
int g=;
int num=;
int r=n;
int l=;;
for(int i=n;i>=;i--)
{
if(!kmp(i,i-))
{
if(num==)
{
l=i;
}
p[++num]=i-;
}
}
printf("Case #%d: ",++cas);
if(!l)
printf("-1\n");
else
{
for(int i=;i<=num;i++)
{
for(int j=r;j>=l;j--)
{
if(!kmp(j,p[i]))
{
l=j;
break;
}
}
if(l==r)
break;
}
printf("%d\n",l);
}
}
}
【HDOJ5510】Bazinga(KMP)的更多相关文章
- 【BZOJ3670】动物园(KMP算法)
[BZOJ3670]动物园(KMP算法) 题面 BZOJ 题解 神TM阅读理解题 看完题目之后 想暴力: 搞个倍增数组来跳\(next\) 每次暴跳\(next\) 复杂度\(O(Tnlogn)\) ...
- 【BZOJ3670】【NOI2014】动物园(KMP算法)
[BZOJ3670]动物园(KMP算法) 题面 BZOJ 题解 神TM阅读理解题 看完题目之后 想暴力: 搞个倍增数组来跳\(next\) 每次暴跳\(next\) 复杂度\(O(Tnlogn)\) ...
- NoSQL之【MongoDB】学习(三):配置文件说明
摘要: 继上一篇NoSQL之[MongoDB]学习(一):安装说明 之后,知道了如何安装和启动MongoDB,现在对启动时指定的配置文件(mongodb.conf)进行说明,详情请见官方. 启动Mon ...
- 【操作系统】进程间通信(C#)
原文:[操作系统]进程间通信(C#) 08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xia ...
- 【Luogu3444】ORK-Ploughing(贪心)
[Luogu3444]ORK-Ploughing(贪心) 题面 Luogu 题解 我们知道,如果我们选定了以横向为主,或者纵向为主, 那么就有尽可能减少另一个方向上耕地的次数 所以分开贪心,但是本质相 ...
- 【BZOJ1997】Planar(2-sat)
[BZOJ1997]Planar(2-sat) 题面 BZOJ 题解 很久没做过\(2-sat\)了 今天一见,很果断的就来切 这题不难呀 但是有个玄学问题: 平面图的性质:边数\(m\)的最大值为\ ...
- 【Luogu1337】平衡点(模拟退火)
[Luogu1337]平衡点(模拟退火) 题面 洛谷 题解 和BZOJ3680吊打XXX是一样的.. 但是数据很强呀.. 疯狂调参 各种WA... 很无奈呀.... #include<iostr ...
- 【BZOJ1996】合唱队(动态规划)
[BZOJ1996]合唱队(动态规划) 题面 BZOJ 题解 很容易的一道题 因为每个人不是放在了左边就是放在了右边 所以每次放好的人必定是原序列的一个子串 所以,很容易想到区间\(dp\) 设\(f ...
- 【BZOJ1899】午餐(动态规划)
[BZOJ1899]午餐(动态规划) 题面 BZOJ 题解 我太弱了 这种\(dp\)完全做不动.. 首先,感性理解一些 如果所有人都要早点走, 那么,吃饭时间长的就先吃 吃饭时间短的就晚点吃 所以, ...
随机推荐
- Git 内部原理之 Git 对象哈希
在上一篇文章中,将了数据对象.树对象和提交对象三种Git对象,每种对象会计算出一个hash值.那么,Git是如何计算出Git对象的hash值?本文的内容就是来解答这个问题. Git对象的hash方法 ...
- Ansible学习 安装
对于运维人员来说,自动化工具是日常工作中比不可少的.Ansible是一个很好的自动化工具. Ansible默认使用SSH协议管理机器,在管理主机上安装Ansible,管理主机和被管理主机只要安装了py ...
- 【CSS】非常简单的css实现div悬浮页面底部
<div id="demo_div"></div> <style> #demo_div{ left:; position: fixed; bot ...
- 绘制圆形 和 椭圆形:边圆形 imageellipse() 、 填充圆形imagefilledellipse()
<?php //1. 绘制图像资源(创建一个画布) $image = imagecreatetruecolor(500, 300); //2. 先分配一个绿色 $green = imagecol ...
- Ecshop里添加多个h1标题
目录 功能: 思路: 效果: pageheader_list.htm里 product_sn_list.htm模板里 控制器里 功能: 点击页面右边的两个按钮,切换下面的<div class=& ...
- 使用 CAST
使用 CAST: CAST ( expression AS data_type ) 使用 CONVERT: CONVERT (data_type[(length)], expression [, st ...
- mysql双机热备实现
说明 机器A:(172.16.1.251),机器B:(172.16.1.252) 两台机器都创建数据库web:create database hello default charset utf8; 实 ...
- 动态规划:完全背包问题-HDU1114-Piggy-Bank
解题心得: 1.这是一个完全背包问题的变形,题目要求是求在规定的重量下求价值最小,所以需要将d[0]=0关键的初始化 2.当不可能出现最小的价值时,d的状态并没有被改变,说明并没有放进去一个硬币. 题 ...
- App 设计技巧
http://www.360doc.com/content/14/1120/18/21412_426730809.shtml http://veryui.diandian.com/post/2013- ...
- IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数
因为项目需要解析URL当中参数的部分,在网上搜索了一下都没有相关的资料. 然后就自己写了一个 其实我就是通过正则表达式来处理URL 进行解析的 好了直接上代码吧 也是非常的简单,大家拷贝过去就可以使用 ...