1818: squee_spoon and his Cube VI

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 54   Solved: 13

Submit Status Web Board

Description

市面上最常见的魔方,是三阶魔方,英文名为Rubik's Cube,以魔方的发明者鲁比克教授的名字命名。另外,二阶魔方叫Pocket Cube,它只有2*2*2个角块,通常也就比较小;四阶魔方叫Revenge Cube,这是因为就算你好不容易复原了三阶魔方,四阶魔方也会向你“复仇”;而五阶魔方叫Professor Cube,人们认为只有专家才能够复原这么复杂的魔方。

作为ACM(A Cube Master),squee_spoon准备为九阶正十二面体魔方命名,此时他的脑中浮现出一个长长的字符串S,似乎可以作为魔方的英文名。但是问题没有那么简单,squee_spoon有n个不喜欢的短字符串a1~an,所以squee_spoon希望将九阶正十二面体魔方命名为S的最长子串T,在这个子串中,不能包含a1~an,即a1~an均不是T的子串。

Input

多组数据。

第一行,字符串S,长度不会超过10^5。

第二行,一个整数n,1<=n<=10。

接下来的n行,n个字符串a1~an,ai的长度不会超过10。

Output

对于每组数据,输出两个整数,分别是T的长度及其在原串S中的起始下标(下标从0开始,如果存在多解,输出最小的起始下标)。

Sample Input

orz_zzuspy
2
orz
us
YM_2030xxj
3
_20
03
M_

Sample Output

6 1
5 5
//这是好友写的,直接暴力模拟就出来了。。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s[100010];
char ss[11][11];
int main()
{int n,i,j,k,l;while(scanf("%s",s)!=EOF){l=strlen(s);scanf("%d",&n);for(i=0;i<n;i++)scanf("%s",ss[i]);int num=0,cnt;int ll=-1,pp=0;for(i=0;i<l;i++){for(j=0;j<n;j++){if(s[i]==ss[j][0]){int l1=strlen(ss[j]);for(k=0;k<l1;k++){if(s[i+k]!=ss[j][k])break;}if(k==l1){cnt=i+l1-num-1;if(cnt>ll){ll=cnt;pp=num;}num=i+1;}}}}cnt=l-num;if(cnt>ll){ll=cnt;pp=num;}printf("%d %d\n",ll,pp);}return 0;
} 

//这是我的代码。

//想了好久,好不容易想到KMP,写了后测试数据过了,以为对了,但没想到提交后就WA了。。。。
//这是WA的代码,哪位大神看到,帮忙改改,我实在是找不出来了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define INF 0s3f3f3f3f
char a[100010];
struct zz
{int s;int e;
}m[100010];
char b[11];
int p[110];
int k;
int cmp(zz a,zz b)
{if(a.e==b.e)return a.s<b.s;return a.e<b.e;
}
void getp()
{int i=0,j=-1;int l=strlen(b);p[i]=j;while(i<l){if(j==-1||b[i]==b[j]){i++;j++;p[i]=j;}elsej=p[j];}
}
void kmp()
{getp();int i=0,j=0;int l1,l2;l1=strlen(a);l2=strlen(b);while(i<l1){if(j==-1||a[i]==b[j]){i++;j++;if(j==l2){m[k].e=i-1;m[k].s=i-l2;k++;}}else j=p[j];}
}
int main(){int n;while(scanf("%s",a)!=EOF){memset(m,0,sizeof(m));int l1=strlen(a);scanf("%d",&n);k=0;for(int i=0;i<n;i++){scanf("%s",b);kmp();}sort(m,m+k,cmp);int len=0;int l=0;int pp=0;m[k].e=m[k].s=l1;for(int i=0;i<=k;i++){if(m[i].e-l>len){len=m[i].e-l;pp=l;}l=m[i].s+1;}printf("%d %d\n",len,pp);}return 0;
}

zzulioj 1818: squee_spoon and his Cube VI (KMP求最长字符串) 好题相关推荐

  1. zzulioj 1818: squee_spoon and his Cube VI 【dp】

    1818: squee_spoon and his Cube VI Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 58   Solved: 14 S ...

  2. 郑大第九届校赛正式赛(1818: squee_spoon and his Cube VI)

    1818: squee_spoon and his Cube VI Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 59  Solved: 15 Sub ...

  3. squee_spoon and his Cube VI(贪心,找不含一组字符串的最大长度+kmp)

    1818: squee_spoon and his Cube VI Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 77  Solved: 22 Sub ...

  4. zzulioj1818: squee_spoon and his Cube VI

    1818: squee_spoon and his Cube VI Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 41   Solved: 13 S ...

  5. 编写一个头文件,头文件中定义一个宏cube(x)用于求一个数的平方

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p145 7.1.2 上级实训内容 [实现内容17]编写一个头文件,头文件中定义一个宏cube(x)用于 ...

  6. hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)

    Problem - 3374 KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html 循环节推导的证明相当的好,这 ...

  7. hdu 1358 Period (KMP求循环次数)

    Problem - 1358 KMP求循环节次数.题意是,给出一个长度为n的字符串,要求求出循环节数大于1的所有前缀.可以直接用KMP的方法判断是否有完整的k个循环节,同时计算出当前前缀的循环节的个数 ...

  8. python KMP算法查找子字符串

    最近在刷leecode,碰见字符串检索题.原题是这样的,有两个字符串,一长一短,就看看短的是不是在长的里面,如果在返回第一个字符的下标. 因为总忘记,所以记录下我的思路是咋捋顺的,其实看这一篇就够了, ...

  9. KMP算法:最长字符串匹配算法

    KMP算法:最长字符串匹配算法 查找模式串在目标串中的位置 例如:目标串"asdasdaabbccaabsesdf" 模式串:"aabbccaabse" 则返回 ...

最新文章

  1. android studio 不生成buildconfig,Android Studio Update 0.4.0找不到buildConfig()
  2. vue 监听map数组变化_解决vue无法侦听数组及对象属性的变化问题
  3. html图片上加水印,css给图片添加水印
  4. Java 基础【01】 This 用法
  5. 世界各国和地区名称代码(GB/T 2659-2000)
  6. openwrt路由器打印机服务器设置_openwrt 路由器下HP 打印机的安装
  7. Intel出品开源图片标注工具CVAT在Ubuntu18.04上部署
  8. 关于建站、服务器、云虚拟主机你想知道的都在这里!
  9. 如何编制试算平衡表_试算平衡表的编制步骤是怎样的?
  10. 三阶矩阵求特征值的快速算法
  11. python基础之文件处理
  12. [内附完整源码和文档] 基于Java的学生学籍管理系统
  13. 动漫《那年那兔那些事儿》弹幕爬虫采集数据分析
  14. C++ Builder 由于找不到 CC32C260MT.DLL、rtl260.bpl、vcl260.bpl,无法继续执行代码
  15. 低代码学习教程:生成固定格式流水号
  16. CAD梦想画图中“合并命令”
  17. qt 从文件中读出数据显示在表格中_java如何从文件中读取数据存在数组再显示在表格中!!...
  18. vue+element-ui实现富文本(含有图片粘贴拖拽上传)
  19. 项目进行时:世界数字经济与区块链大会
  20. 阿里云专有云容器服务弹性伸缩最佳实践

热门文章

  1. vue中数组的七个响应式方法
  2. 惠普光影精灵7Victus怎么样
  3. LeetCode 唯一摩尔斯密码词
  4. 最酷炫的游戏电竞视频,剪辑大师都需要
  5. Apache Flink 2022 新年大礼包
  6. 题目:long long long 之加法运算
  7. 【转载】10种无线技术全接触
  8. FPGA基础设计(11)Verilog任务、函数、系统任务、系统函数
  9. 2019-8-28-WPF-开发
  10. 省技术市场举办技术合同政策及实务操作培训会