第3次CCF-3-字符串匹配(kmp的简单应用)
2016-09-07 22:22
330 查看
问题描述
问题描述
试题编号: | 201409-3 |
试题名称: | 字符串匹配 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。 输入格式 输入的第一行包含一个字符串S,由大小写英文字母组成。 第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。 第三行包含一个整数n,表示给出的文字的行数。 接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。 输出格式 输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。 样例输入 Hello 1 5 HelloWorld HiHiHelloHiHi GrepIsAGreatTool HELLO HELLOisNOTHello 样例输出 HelloWorld HiHiHelloHiHi HELLOisNOTHello 样例说明 在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。 评测用例规模与约定 1<=n<=100,每个字符串的长度不超过100。 kmp模板题 代码如下: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<limits.h> #include<algorithm> #include<iostream> #include<queue> #include<stack> #include<vector> #include<math.h> #include<string> using namespace std; #define maxn 105 char s[maxn]; char str[maxn][maxn]; char str1[maxn][maxn]; bool flag[maxn]={0}; int n,m; int p[1005]; void print() { int i,j=0; p[1]=0; int len=strlen(s+1); for(i=2;i<=len;i++) { while(j>0 && s[j+1]!=s[i]) j=p[j]; if(s[i]==s[j+1]) j++; p[i]=j; } } void kmp(int x) { int k=x,i,j=0,sum=strlen(s+1); int len=strlen(str[k]+1); for(i=1;i<=len;i++) { while(j>0 && str[k][i]!=s[j+1]) j=p[j]; if(s[j+1]==str[k][i]) j++; if(j==sum) { flag[k]=1; break; } } } void work1() { for(int i=1;s[i]!='\0';i++) s[i]=tolower(s[i]); for(int i=1;i<=n;i++) { scanf("%s",str[i]+1); strcpy(str1[i]+1,str[i]+1); for(int j=1;str[i][j]!='\0';j++) str[i][j]=tolower(str[i][j]); print(); kmp(i); } } void work2() { for(int i=1;i<=n;i++) { scanf("%s",str[i]+1); print(); kmp(i); } } int main() { int i,j; scanf("%s",s+1); scanf("%d%d",&m,&n); if(m==0) work1(); else work2(); for(i=1;i<=n;i++) { if(m==0) { if(flag[i]) printf("%s\n",str1[i]+1); } else { if(flag[i]) printf("%s\n",str[i]+1); } } } |
相关文章推荐
- CCF 201409-3 字符串匹配 (KMP)
- 字符串匹配——简单匹配,KMP,分析讲解
- Python字符串匹配的简单应用
- 字符串匹配的KMP算法(简单清晰的认识KMP)
- P3375 【模板】KMP字符串匹配(全程注释,简单易懂)
- KMP字符串匹配 简单理解
- CCF CSP 2014年9月第3题 字符串匹配(strstr函数的应用)
- KMP字符串匹配(1)
- 字符串匹配算法:KMP学习心得
- KMP字符串匹配C++代码实现
- 字符串匹配 KMP 算法
- fzu 1926 填空 【kmp字符串匹配】
- KMP(字符串匹配)算法
- 几种字符串匹配算法性能简单实验对比
- php 类似正则获取字符串匹配内容的简单方法
- 字符串匹配算法:KMP
- 字符串匹配(kmp)
- kmp字符串匹配算法
- 字符串匹配 KMP
- 字符串匹配算法-kmp