Bazinga HDU 5510 Bazinga(双指针)

题链

解法:对于串i来说,如果串i是不符合的,那么代表串i之前的字符串都是i的子串,那么我们求一个新的i(定义为ti),如果i是ti 的子串,那么串i之前的字符串都没必要再匹配了,如果不是,ti就是符合要求的答案之一

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int N=2005;
char a[505][N];
int f[505][N];
void getFail(int id)
{
f[id][0]=f[id][1]=0;
int m=strlen(a[id]);
for(int i=1;i<m;i++)
{
int j=f[id][i];
while(j&&a[id][i]!=a[id][j]) j=f[id][j];
f[id][i+1]=a[id][i]==a[id][j]?j+1:0;
}
}
int find(int id1,int id2)
{
int j=0,n=strlen(a[id1]),m=strlen(a[id2]);
for(int i=0;i<n;i++)
{
while(j&&a[id2][j]!=a[id1][i]) j=f[id2][j];
if(a[id2][j]==a[id1][i]) j++;
if(j==m) return i-m+2;
}
return -1;
}
int main()
{
int T;
scanf("%d",&T);
int ca=0;
while(T--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",a[i]);
getFail(i);
}
int flag=0,ans=-1;
int l=1,r=1;
while(r<=n){
while(l<r){
if(find(r,l)!=-1) l++;
else{
ans=r;
break;
}
}
r++;
}
printf("Case #%d: %d\n",++ca,ans);
}
return 0;
}

最新文章

  1. zookeeper源码分析之一服务端启动过程
  2. 前端基础之 url src href
  3. ALT+TAB切换时小图标的添加 界面透明 屏幕大小 竖行字体 进程信息
  4. Android开发LogCat一直不停输出的解决方法
  5. store.js - 轻松实现本地存储(LocalStorage)
  6. Python核心编程-描述符
  7. postgresql数据库文件目录
  8. ASP.NET MVC4 WebAPI若干要点
  9. Java命名:
  10. 在LAMP环境下搭建JSP动态网页
  11. Tencent社会招聘scrapy爬虫 --- 已经解决
  12. 如何获取离线安装Chrome扩展程序的包
  13. 自定义View总结2
  14. Asp.Net MVC+EF+三层架构
  15. Linux安装64位Mysql5.7
  16. .NET 定时执行任务解决方案(Timer &amp; Quartz.Net)
  17. SignalR 服务器系统配置要求
  18. 吉他软件Guitar Pro播放无声音的解决方法
  19. Unique Paths leetcode java
  20. SharePoint CAML In Action——Part I

热门文章

  1. Linux-----Kconfig文件的简介
  2. IDEA Artifacts问题
  3. self , static 都是何方神圣?
  4. 认识BACnet协议
  5. ACM_拼接数字
  6. 用 jQuery 实现简单倒计时功能
  7. Hadoop Hive概念学习系列之HiveQL编译基础(十)
  8. 实现div左右上下都居中
  9. 【原创】利用doxygen来管理项目文档或注释
  10. Javascript DOM 编程艺术(第二版)读书笔记——DOM基础