Poj 3461 Oulipo
来源:互联网 发布:魔域一条龙网站源码 编辑:程序博客网 时间:2024/06/04 20:09
点击此处即可传送Poj 3461
**Oulipo**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.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 Input3BAPCBAPCAZAAZAZAZAVERDIAVERDXIVYERDIANSample Output130
题目大意:就是给你一个子串P和一个主串S,求在主串中有多少个子串。。。。
解题思路:这几天一直在整AC自动机,刚开始一看条件反射我以为是AC自动机,结果一想不是,因为,AC自动机都是给你很多个串,让你找前缀的,这个不是,这个是两两比较的所以很明显是KMP,结果就行了。。。。但是刚开始的时候犯了一个错误,后面会给出介绍哦。。。
上代码:
这是AC代码:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 1000005;char S[maxn], P[maxn];int next[maxn];int ans ;void Getnext(){ int j = 0; int k = -1; next[0] = -1; int Plen = strlen(P); while(j < Plen) { if(k==-1 || P[j]==P[k]) { k++; j++; next[j] = k; } else k = next[k]; }}int KMP(){ int i = 0; int j = 0; Getnext(); int Slen = strlen(S); int Plen = strlen(P); while(i<Slen && j<Plen) { if(j==-1 || S[i]==P[j]) { i++; j++; } else j = next[j]; if(j == Plen) { ans++; j = next[j]; } } return ans;}int main(){ int t; scanf("%d",&t); while(t--) { ans = 0; scanf("%s%s",P,S); KMP(); printf("%d\n",ans); } return 0;}
下面给出一个TLE的代码,是不是感觉与前面几乎一样,请仔细找Bug,其实这也是一种经验啊,说多了都是泪啊。。。。。。;
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 1000005;char S[maxn], P[maxn];int next[maxn];int ans ;void Getnext(){ int j = 0; int k = -1; next[0] = -1; while(j < strlen(P)) { if(k==-1 || P[j]==P[k]) { k++; j++; next[j] = k; } else k = next[k]; } return ;}int KMP(){ int i = 0; int j = 0; Getnext(); while(i<strlen(S) && j<strlen(P)) { if(j==-1 || S[i]==P[j]) { i++; j++; } else j = next[j]; if(j == strlen(P)) { ans++; j = next[j]; } } return ans;}int main(){ int t; scanf("%d",&t); while(t--) { ans = 0; scanf("%s%s",P,S); KMP(); printf("%d\n",ans); } return 0;}
与前面不一样的就是在算字符串的长度的时候,如果一直在while循环里的话,就会一直算,就会TLE的,所以就直接在外面算了,下次一定要注意,应该没有下一次了。。。
0 0
- POJ 3461 Oulipo
- POJ-3461 Oulipo
- poj 3461 Oulipo
- poj 3461 Oulipo(KMP)
- poj 3461 Oulipo
- POJ-3461-Oulipo
- POJ 3461 Oulipo(KMP)
- POJ 3461 Oulipo
- POJ 3461 Oulipo
- POJ 3461 Oulipo
- POJ 3461 Oulipo---kmp
- POJ 3461 Oulipo KMP
- poj-Oulipo -3461
- POJ 3461 Oulipo
- POJ 3461 Oulipo
- POJ 3461 Oulipo
- poj 3461 Oulipo
- poj 3461 Oulipo
- js_事件流
- 面向对象(构造函数+构造代码块)-第10天
- 配置struts出现404错误
- Android开发工具汇总
- 算法进军大道(二)
- Poj 3461 Oulipo
- BeagleBone Black使用无线网卡通过WIFI联网
- CocoaPods pod install/pod update更新慢的问题
- js代码触发onchange事件
- 移动基地SDK接入Cocos2dx手游笔记
- linux下编译安装程序的路径说明
- 计算机组成原理之存储器总结---来自北大陆俊林老师的视频内容(2)
- unity 获取不到组件对象问题
- 开源稳定的消息队列 RabbitMQ