poj 3461 Oulipo (KMP入门)
2015-08-24 10:49
239 查看
DescriptionThe French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote from the book:
Tout avait Pair normal, mais tout s’affirmait faux. Tout avait Fair normal, d’abord, puis surgissait l’inhumain, l’affolant. Il aurait voulu savoir où s’articulait l’association qui l’unissait au roman : stir son tapis, assaillant à tout instant son imagination, l’intuition d’un tabou, la vision d’un mal obscur, d’un quoi vacant, d’un non-dit : la vision, l’avision d’un oubli commandant tout, où s’abolissait la raison : tout avait l’air normal mais…
Perec would probably have scored high (or rather, low) in the following contest. People are asked to write a perhaps even meaningful text on some subject with as few occurrences of a given “word” as possible. Our task is to provide the jury with a program that counts these occurrences, in order to obtain a ranking of the competitors. These competitors often write very long texts with nonsense meaning; a sequence of 500,000 consecutive 'T's is not unusual. And they never use spaces.So we want to quickly find out how often a word, i.e., a given string, occurs in a text. More formally: given the alphabet {'A', 'B', 'C', …, 'Z'} and two finite strings over that alphabet, a word W and a textT, count the number of occurrences of W in T. All the consecutive characters of W must exactly match consecutive characters of T. Occurrences may overlap.InputThe first line of the input file contains a single number: the number of test cases to follow. Each test case has the following format:One line with the word W, a string over {'A', 'B', 'C', …, 'Z'}, with 1 ≤ |W| ≤ 10,000 (here |W| denotes the length of the string W).One line with the text T, a string over {'A', 'B', 'C', …, 'Z'}, with |W| ≤ |T| ≤ 1,000,000.OutputFor every test case in the input file, the output should contain a single number, on a single line: the number of occurrences of the word W in the text T.Sample Input3 BAPC BAPC AZA AZAZAZA VERDI AVERDXIVYERDIANSample Output
1 3 0 题意:在第二个字符串中查找第一个字符串出现的个数。 以第一个字符串建立next函数,然后在第二个字符串中查找。
#include<cstdio> #include<cstring> using namespace std; int next[100000]; char s1[100000],s2[2000000]; void get_next() { int i=0,j=-1; next[0]=-1; while (s1[i]) { if (j==-1||s1[i]==s1[j]) { i++; j++; next[i]=j; } else j=next[j]; } } int kmp() { int i=0,j=0,k=0,len; len=strlen(s1); while (s2[i]) { if (j==-1||s1[j]==s2[i]) { j++; i++; } else j=next[j]; if (j==len) { k++; j=next[j]; } } return k; } int main() { int n; scanf("%d",&n); getchar(); while (n--) { gets(s1); gets(s2); memset(next,0,sizeof(next)); get_next(); int ans=kmp(); printf("%d\n",ans); } }
相关文章推荐
- HTMLParser使用
- [leetcode][math] Missing Number
- Hadoop错误5_配置Hadoop环境变量时export‘=’not a valid identifier的一个原因
- WindowsAPI之RegOpenKey和RegSetValueEx函数
- oracle 估算undo脚本
- STM32独立看门狗
- EF中对一个或多个实体验证失败
- 23种设计模式
- Android与服务器端数据交互(http协议整合struts2+android)
- 树根 Digital root
- mysql中的replace into和 on duplicate key update
- LINUX笔记7
- IOS常用宏定义
- JAP和Spring整合的三种方式
- Struts2与Servlet的关系
- 计算机中二进制原码、反码、补码的计算
- BZOJ 1093 [ZJOI2007]最大半连通子图
- Rhel 7 nfs install
- D3D显示YUV图像
- Java中莫名其妙的时区错误