HDU 5007 Post Robot KMP (ICPC西安赛区网络预选赛 1001)
2014-09-14 21:57
525 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5007
解题报告:输入一篇文章,从头开始,当遇到 “Apple”, “iPhone”, “iPod”, “iPad” 这几个字符串时,输出”MAI MAI MAI!“,当遇到"Sony"时,输出“SONY DAFA IS GOOD!"。
看题太渣,题目意思还有个每个单词最多只出现一次关键词。有了这个条件就简单了,只要分别对每个单词进行五次KMP,匹配到了就输出对应的解释。
View Code
解题报告:输入一篇文章,从头开始,当遇到 “Apple”, “iPhone”, “iPod”, “iPad” 这几个字符串时,输出”MAI MAI MAI!“,当遇到"Sony"时,输出“SONY DAFA IS GOOD!"。
看题太渣,题目意思还有个每个单词最多只出现一次关键词。有了这个条件就简单了,只要分别对每个单词进行五次KMP,匹配到了就输出对应的解释。
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; char str[1000000]; int next[1000000]; void get_next(char* s,int* next) { int len = strlen(s); int i = -1,j = 0; memset(next,0,sizeof(next)); next[0] = 0; while(j < len) { if(i < 0 || s[i] == s[j]) { i++; next[j+1] = i; } else i = 0; j++; } } int kmp(char* s,char* t,int* next) { get_next(t,next); int lens = strlen(s); int lent = strlen(t); int i = 0,j = 0; while(i < lens && j < lent) { if(s[i] == t[j]) j++; else j = next[j]; i++; // printf("%d %d\n",i,j); } if(j == lent) return i - lent; //匹配成功返回开始配对的位置 else return -1; //匹配失败,返回尾指针 } char temp[6][20] = {"Apple","iPhone","iPod","iPad","Sony"}; int main() { while(scanf("%s",str)!=EOF) { if(kmp(str,temp[0],next)!=-1) puts("MAI MAI MAI!"); if(kmp(str,temp[1],next)!=-1) puts("MAI MAI MAI!"); if(kmp(str,temp[2],next)!=-1) puts("MAI MAI MAI!"); if(kmp(str,temp[3],next)!=-1) puts("MAI MAI MAI!"); if(kmp(str,temp[4],next)!=-1) puts("SONY DAFA IS GOOD!"); } }
View Code
相关文章推荐
- HDU - 6206 Apple (2017 ACM-ICPC 亚洲区 (青岛赛区) 网络赛 1001)
- hdu 5892 List wants to travel 2016ACM/ICPC沈阳赛区网络赛1001
- Hdu 4035 Maze (dp求期望) - 2011 ACM/ICPC 成都赛区网络预选赛 1005
- hdu 5878 I Count Two Three 2016ACM/ICPC青岛赛区网络赛1001
- HDU 5478 2015 ACM/ICPC 上海赛区网络赛1011 模运算+快速幂
- HDU 4279 Number 第37届ACM/ICPC天津赛区网络赛1002题 (简单规律题)
- acm_icpc网络赛第三站:西安赛区
- hdu 5869 Different GCD Subarray Query 2016ACM/ICPC大连赛区网络赛1002
- hdu 5881 Tea 2016ACM/ICPC青岛赛区网络赛1004
- hdu 5875 Function 2016ACM/ICPC大连赛区网络赛1008
- HDU 4278 Faulty Odometer 第37届ACM/ICPC天津赛区网络赛1001题 (简单水题)
- HDU 4288 Coder 第37届ACM/ICPC 成都赛区网络赛1001题 (线段树)
- 2010 ACM/ICPC Online-Contest-SCU[四川赛区网络预选赛]
- hdu 5882 Balanced Game 2016ACM/ICPC青岛赛区网络赛1005
- hdu 5879 Cure 2016ACM/ICPC青岛赛区网络赛1002
- hdu 5878 I Count Two Three ICPC青岛站网络赛1001
- hdu 4738 Caocao's Bridges 2013 ACM-ICPC杭州赛区网络赛 1001 双连通分量
- hdu 4576 robot 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现-1001-robot
- 2012 ACM/ICPC 成都赛区网络赛 HDU 4296
- HDOJ 5007 Post Robot--2014网络赛西安赛区A题