poj 3461 Oulipo,裸kmp
2016-03-14 17:05
274 查看
传送门
Oulipo
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
Source
BAPC 2006 Qualification
题意:
裸的kmp
代码:
Oulipo
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 32373 | Accepted: 13093 |
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
Source
BAPC 2006 Qualification
15266997 | njczy2010 | 3461 | Accepted | 1736K | 125MS | G++ | 1147B | 2016-03-14 17:00:52 |
裸的kmp
代码:
#include <iostream> #include <cstdio> #include <map> #include <cstring> #include <algorithm> using namespace std; #define N 1000005 #define ll long long int TT; char s ; char t ; int next ; int ans; int l; int lt; void get_next() { int i,j; i = 0; j = -1; next[0] = -1; while(i<l) { if(j == -1 || s[i] == s[j]){ i++;j++;next[i] = j; } else{ j = next[j]; } } } void kmp() { int i,j; i = 0; j = 0; while(i < lt) { if(j == -1 || t[i] == s[j]){ if(j == l - 1){ ans ++; j = next[j]; } else{ i++;j++; } } else{ j = next[j]; } } } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); scanf("%d",&TT); while(TT--){ //while(scanf("%I64d%I64d",&n,&k)!=EOF){ ans = 0; scanf("%s",s); l = strlen(s); scanf("%s",t); lt = strlen(t); get_next(); kmp(); printf("%d\n",ans); } return 0; }
相关文章推荐
- [DIV/CSS] 用CSS和JS打造一个简单的图片编辑器
- HTML5+JavaScript制作坦克大战游戏——学习笔记二
- Spark Executor Driver资源调度小结
- 集成融云 即时通讯总结
- acm 1000 Moving Tables(贪心算法)
- java并发编程基础之线程安全
- 谈谈css王朝的px,em,rem之间的那些事儿
- NodeJs开发目录
- WPF-DataTemplate创建数据模版
- CodeForces 596A-Wilbur and Swimming Pool
- BestCoder Round #74
- Android二维码的扫描和生成(ZXing)
- 移动平台游戏网络重连方案
- 蓝桥杯 历届试题 六角填数
- c++第1次实验
- SpringMVC源码总结(一)HandlerMapping和HandlerAdapter入门
- 详解PHP实现异步调用的4种方法
- 线程状态转换图
- [UOJ35]后缀排序 做题笔记
- appium跑一个小demo