Poj 3461 Oulipo

来源:互联网 发布:魔域一条龙网站源码 编辑:程序博客网 时间:2024/06/04 20:09

点击此处即可传送Poj 3461

                            **Oulipo**The French author Georges Perec (19361982) 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 givenwordas 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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 别人盗用我手机号申请微信号怎么办 淘宝支付宝里没钱了买家退款怎么办 如果外包把员工社保忘交了怎么办 外包工人没有和包工头的证据怎么办 试用期辞职公司给交的社保怎么办 单位给交员工不想交社保怎么办 淘宝收不到卖家的信息怎么办 不小心把微信聊天记录删掉了怎么办 不小心把打印机驱动删除了怎么办 蓝牙不小心点到忽略此设备怎么办 千牛工作台无线开店确认不了怎么办 开通诚信通后营业执照注销了怎么办 淘宝标的货跟发的不一样怎么办 wps表格里单元之间重叠了怎么办 淘宝店铺停了一段时间没了怎么办 转转买家收货为敲诈卖家怎么办 淘宝被投诉盗用官网图片怎么办 淘宝订单买下后卖家告知无货怎么办 盗图被删除还是待处理违规该怎么办 如果买家说你们的买家秀一样怎么办 花呗唤起安全核身验证失败怎么办 淘宝买东西花呗分期额度不够怎么办 支付宝余额支付额度已达上限怎么办 我是淘宝卖家遇到无良买家怎么办 我的保证金被淘宝当做违约金怎么办 淘宝顾客不想退货申请仅退款怎么办 被买家提供证明说我卖假货怎么办 淘宝退货快递公司填错了俩次怎么办 淘宝上退货把运单号写错了怎么办? 阿里巴巴发货了快递单号掉了怎么办 淘宝上买东西货物被物流扣留怎么办 淘宝买错了对方已发货怎么办 淘宝卖家发货的时候没货了怎么办 买了球显示未出票中奖了怎么办 点错了允许易企秀获得权限怎么办 淘宝还没发货商家拒绝退款怎么办 买家不补邮费还要你发货怎么办 天猫客服提示获取信息失败怎么办 拼多多下单了商家不发货怎么办 店铺扣2分宝贝降权了怎么办 淘宝店没订单没流量怎么办啊