POJ 3461 (KMP)
2016-02-16 23:07
447 查看
Description
The 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 text T,
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.
Input
The 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.
Output
For 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 Input
Sample Output
题意:在S串里找T串出现多少次?
题解:直接上KMP模板就可以了
The 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 text T,
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.
Input
The 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.
Output
For 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 Input
3 BAPC BAPC AZA AZAZAZA VERDI AVERDXIVYERDIAN
Sample Output
1 3 0
题意:在S串里找T串出现多少次?
题解:直接上KMP模板就可以了
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int ans; #define N 1000000+5 char s1 ,s2 ; int fail ; void getfail(char *p,int *f) { int m=strlen(p); f[0]=0; f[1]=0; for(int i=1;i<m;i++) { int j=f[i]; while(j&&p[i]!=p[j])j=f[j]; f[i+1]=p[i]==p[j]?j+1:0; } } void find(char *t,char *p,int *f) { int n=strlen(t),m=strlen(p); getfail(p,f); int j=0; for(int i=0;i<n;i++) { while(j&&p[j]!=t[i])j=f[j]; if(p[j]==t[i])j++; if(j==m)ans++; } } int main() { #ifdef CDZSC freopen("i.txt","r",stdin); #endif int tt; scanf("%d",&tt); while(tt--) { scanf("%s%s",s1,s2); ans=0; find(s2,s1,fail); printf("%d\n",ans); } return 0; }
相关文章推荐
- Linux与Windows共享文件夹之samba的安装与使用(Ubuntu为例)
- Android开发者必知的5个开源库
- 我 Git 命令列表 (1)【转】
- hdu acm 1115 Lifting the Stone(多边形重心)
- [maya学习笔记(2)] 物体的基本操作
- bzoj 3994
- Activity—生命周期方法
- Stunnel使用2
- Spring Ioc原理
- 后台开发高频面试题目
- 定制化Azure站点Java运行环境(1)
- CSS 巧用 :before和:after
- php笔记
- 【BZOJ1012】最大数maxnumber,疯狂CE的线段树练习
- #Android# Android Studio报错 Failure [INSTALL_FAILED_OLDER_SDK]
- bzoj2659 [Beijing wc2012]算不出的算式
- 自己动手写一个推荐系统
- Android Studio 2.0 Instant Run无效(Instant Run没有闪电符号)
- 20160216自学Linux_硬件基础+历史+入门基础开篇
- java学习笔记-cmd执行java程序