BSOJ 4685 DOG进游戏 回顾——KMP
来源:互联网 发布:伐木累软件 编辑:程序博客网 时间:2024/09/21 09:24
4685 -- 【模拟试题】DOG进游戏
Description
给定 个字符串,并给定一个长度为 的匹配串,请你判断在 个字符串中是否有一个字符串与给定的匹配串匹配(即在字符串中存在一段字符与匹配串完全相同)。
如果有能够匹配的字符串,则输出”My God.“如果不能匹配,则输出”My CS.“,然后输出最多能匹配的长度 (即匹配串最多的前x 位,从匹配串第一位开始到第x位)。
Input
第一行首先是一个正整数 ,表示字符串的个数。然后是一个字符串sp ,表示匹配串。
第二行到第n+1 行,每行有一个字符串si ,表示一个待匹配的字符串。
Output
如果能够完全匹配,则输出”My God.“(输出时不含引号)。
如果不能完全匹配,则第一行输出”My CS.“(输出时不含引号),
然后在第二行输出最多能匹配的长度 。
Sample Input
3 aadd
aaddc
aadqc
aabb
Sample Output
My God.
Hint
样例2:
输入:
5 aaaddc
aaad
aaddc
adc
cfbgd
aqqq
输出:
My CS.
Description
给定 个字符串,并给定一个长度为 的匹配串,请你判断在 个字符串中是否有一个字符串与给定的匹配串匹配(即在字符串中存在一段字符与匹配串完全相同)。
如果有能够匹配的字符串,则输出”My God.“如果不能匹配,则输出”My CS.“,然后输出最多能匹配的长度 (即匹配串最多的前x 位,从匹配串第一位开始到第x位)。
Input
第一行首先是一个正整数 ,表示字符串的个数。然后是一个字符串sp ,表示匹配串。
第二行到第n+1 行,每行有一个字符串si ,表示一个待匹配的字符串。
Output
如果能够完全匹配,则输出”My God.“(输出时不含引号)。
如果不能完全匹配,则第一行输出”My CS.“(输出时不含引号),
然后在第二行输出最多能匹配的长度 。
Sample Input
3 aadd
aaddc
aadqc
aabb
Sample Output
My God.
Hint
样例2:
输入:
5 aaaddc
aaad
aaddc
adc
cfbgd
aqqq
输出:
My CS.
4
字符串匹配,自然是KMP了,然而考的时候一脸懵逼,完全记不到了啊!
下面的超链接是转载,侵删。
KMP
这个用于介绍KMP算法,详细代码是自己写的。
/*
另:例题1: seek the name,seek the fame
solution(侵删)
例题2: power string
solution:见record
例题3: Oulipo
solution:见record.注意匹配成功的时候j无需归0,因为可以继续匹配,如aaaaaa;aa
*/
#include<iostream>#include<iomanip>#include<cstring>#include<cmath>#include<cstdio>using namespace std;int next[150]={0},n,lens,lent,mx=0;string s,t;//next[i]--以i结尾的字符串前缀和后缀相同元素最大长度。 void getnxt(string t)//最好在纸上推一推 {next[1]=0;//第一个字符没有前后缀,需要直接加初值 int j=0;for(int i=2;i<=lent;i++)//第一个加了初值才能推得走。 {while(j>0&&t[j+1]!=t[i])j=next[j];//向前寻找 if(t[j+1]==t[i])j++;next[i]=j;}}bool KMP(string s,string t)//s--模式串;t--主串。KMP得到第一次匹配的位置:i-lens+1 {int j=0;//j--匹配数 for(int i=1;i<=lent;i++){while(j>0&&s[j+1]!=t[i])j=next[j];//匹配不了,模式串向右滑动 if(s[j+1]==t[i])j++;//每次都要比较下一个字符。 mx=max(mx,j);//取最大匹配数 if(j==lens)return 1;//匹配数=模式串长度,匹配成功。 }return 0;}int main(){cin>>n;cin>>s;lens=s.length();s=' '+s;for(int i=1;i<=n;i++){memset(next,0,sizeof(next));cin>>t;lent=t.length();t=' '+t;if(KMP(s,t)){puts("My God.");return 0;}}puts("My CS.");printf("%d\n",mx);return 0;}/*5 aaaddcaaadaaddcadccfbgdaqqq*/
0 0
- BSOJ 4685 DOG进游戏 回顾——KMP
- BSOJ 2963:数字游戏 搜索+剪枝
- hdu2768——Cat vs. Dog
- 计算机视觉—DoG和LoG算子
- KMP算法回顾
- 经典KMP算法回顾
- 【NOIP practice】BSOJ 3851 计算概率 智力题——加法原理
- dog
- DoG
- dog
- dog
- 蛋白质结构域示意图绘制软件 —— DOG 1.0
- 光照归一化算法——DoG滤波,自商图
- DOG角点检测——opencv实现
- hdu3829——Cat VS Dog(最大独立集)
- 计算机视觉——DoG和LoG算子
- CSDN日报20170622——《程序 Dog 的大梦想》
- HDU 3829 — Cat VS Dog 最大独立集
- Dagger2, Retrofit和MVP设计模式案例分析
- 在js里获得type="file"的文件大小从而进行限制
- 利用Fragment + FragmentTabHost实现书签导航
- OpenGL.裁剪算法
- 文件存储实现通讯录
- BSOJ 4685 DOG进游戏 回顾——KMP
- C++基类的析构函数为什么是虚函数
- Coursera机器学习 week6 编程作业代码
- android基础之依赖注入
- 【SSH】hibernate之hql学习
- 硬件产品研发必须注意事项(必要了解的前提)
- TCP/UDP的客户端/服务器编程
- NYOJ 题目73 比大小
- BM算法详解