poj 3641 ——2016——3——15

传送门:http://poj.org/problem?id=3461

题目大意:给你两个字符串p和s,求出p在s中出现的次数。

题解:这一眼看过去就知道是KMP,作为模板来写是最好不过了。。。。

这道题我写了两种风格的kmp,个人感觉第2种好理解一些;

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #define inf
 5 char s[1000100],p[100010];
 6 int next[100010];
 7 int lens,lenp,n;
 8 using namespace std;
 9 void getnext()
10 {
11     int j=-1,i=0;
12     next[0]=-1;
13     while (i!=lenp)
14     {
15         if (j==-1 || s[i]==s[j])
16             next[++i]=++j;
17         else
18             j=next[j];
19     }
20 }
21 int KMP()
22 {
23     int i=0,j=0,count=0;
24     while (i!=lens && j!=lenp)
25     {
26         if (s[i]==p[j]||j==-1)
27             ++i,++j;
28         else
29             j=next[j];
30         if (j==lenp)
31         {
32             count++;
33             j=next[j];
34         }
35     }
36     return count;
37 }
38 int main()
39 {
40     int z;
41     scanf("%d",&z);
42     for (int zz=1; zz<=z; zz++)
43     {
44         scanf("%s%s",p,s);
45         lens=strlen(s);
46         lenp=strlen(p);
47         //memset(next,0,sizeof(next));
48         getnext();
49         int ans=KMP();
50         printf("%d\n",ans);
51     }
52 }

第一种

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #define maxn 1000100
 5 int n,fix,ans,i,lens,lent;
 6 char s[maxn],t[maxn];
 7 int next[maxn];
 8 void getnext()
 9 {
10     fix=0;
11     for (fix,i=2; i<=lent; i++)
12     {
13         while(fix && t[fix+1]!=t[i]) fix=next[fix];
14         if (t[fix+1]==t[i]) fix++;
15         next[i]=fix;
16     }
17 }
18 int KMP()
19 {
20     int count;
21     fix=0; count=0;
22     for (int i=1; i<=lens; i++)
23     {
24         while (fix && t[fix+1]!=s[i]) fix=next[fix];
25         if (t[fix+1]==s[i]) fix++;
26         if (fix==lent)
27         {
28             count++;
29             fix=next[fix];
30         }
31     }
32     return count;
33 }
34 int main()
35 {
36     int z;
37     scanf("%d",&z);
38     for (int zz=1; zz<=z; zz++)
39     {
40         scanf("%s",t+1);
41         scanf("%s",s+1);
42         lens=strlen(s+1); lent=strlen(t+1);
43         memset(next,0,sizeof(next));
44         getnext();
45         ans=KMP();
46         printf("%d\n",ans);
47     }
48 }

第二种

时间: 2024-10-16 08:20:16

poj 3641 ——2016——3——15的相关文章

2016/02/15 codes

return e.addTest = function(a,b){ if(typeof a == "object") for(var d in a )y(a,d)&& e.addTest(d,a[d]); else{a = a.toLowerCase(); if(e[a]!== c)return e; b = typeof b = "function"?b():b, typeof f != "undefined" &&am

POJ 3641 Pseudoprime numbers 米勒罗宾算法

链接:http://poj.org/problem?id=3641 题意:由费马小定理可得,对于素数p,a^p = a (mod p),但是对于某些非素数p,也有比较小的可能满足a^p = a (mod p),如果满足,则称p是a条件下的伪素数,现给出p,a,问p是不是a条件的伪素数. 思路:首先用米勒 罗宾判断p是不是素数,如果不是,判断a^p = a (mod p)是否成立. 代码: #include <iostream> #include <cstdio> #include

2016.4.15 -关于分离和总结

2016.4.15 科比退役了,祝老大走好,作为铁杆科密的我没有选择在社交媒体上去煽情和感伤,我只知道,我喜欢科比,是因为他的精神,现在的我需要传承老大的“凌晨四点的洛杉矶”,在内心和行动上默默坚持,默默努力,前行.用自己的实际行动证明一切,而不是说说. 研究生阶段唯一的好友,张同学今天突然告诉我他要选择转博了,没有一点惊喜,反而有点悲伤,剩下的路又要一个人走了,或许是上天对我的考察,,,终于想通 了,其实我们每个人都有自己的路要走,每个人都只能陪你走一段路程而已,剩下的路,你一个人走,要坚持,

2016.2.15 四旋翼相关资料

--------2016.2.15--------最近在玩儿四旋翼,所以相关的资料我会贴上来供需要的朋友参考,如果遇到了我们趟过的地雷就能够方便一些. 机架:F450我们之后由于要将NVIDIA的开发板和飞行器连在一起,所以从机架的选择上我们要慎重考虑,之前为了方便选的是F330,但是DJI正版的F330停产了,所以taobao的F330进行测试,经过测试发现F330相当脆弱,机架非常容易在后写撞击中折断,所以如果上面搭载NVIDIA的开发板的话,那么这样开发的成本太高,一旦炸机可能机毁板子亡,

POJ 3641 Pseudoprime numbers(快速幂)

嗯... 题目链接:http://poj.org/problem?id=3641 AC代码: 1 #include<cstdio> 2 #include<iostream> 3 4 using namespace std; 5 6 inline bool is_prime(int x){ 7 if(x == 2) return 1; 8 if(x % 2 == 0) return 0; 9 for(int i = 3; i * i <= x; i += 2){ 10 if(!

macbook pro 2016 2017 15寸 雷电3 外接显卡 epu 简单教程(不修改UEFI)

雷电3外接显卡效果还不错,但是除了akitio node 其他厂家并不会维护自己的固件来适配新机型,我自己买的mbp 2016 15''就出现了和AORUS Gaming Box 1070不兼容的问题,在引导的时候会在win徽标处转圈卡死,我联系了厂家,客服,给他们打了电话发了邮件,都快变成骚扰了,不过并没有解决问题,得到的回复是问题在解决中,不知道什么时候能解决. 后来在egpu.io上找到了解决方案并尝试成功,效果还不错 https://egpu.io/forums/implementati

2016.8.15

今天是8月15号,又下起了倾盆大雨,还好没被淋住,希望不要有一天会变得一切都那么糟糕,说说今天吧.今天呢又被迫重复的学习了一遍SqlServer,一个不喜欢走 曾经走过路的人我又该怎么去安然的听课,虽然我的数据库语法记得不熟悉但是我还是不愿意去学第二遍,不是不愿意学习,而是一种性格,我知道自己很差但是我也得需要一点性格吧,我也常常的去改变自己,可是想的和做的不一样的,就跟写一个程序思路有了可是写起来寸步难行,真的是执盘流泪啊! 有的时候你忘掉一个人,然后多年以后你再次和她联系你会发现,你们互相已

2016/1/15 面向对象练习 1,创建类 属性 方法 构造方法 2,自定义图书类 3温度单位转换工具

1 public class Factory { 2 3 //属性 4 //品牌 5 String pinpai; 6 //设备 7 int machine; 8 //材料 9 double material; 10 //资金 11 double money; 12 //人工 13 int rengong; 14 //产品 15 int goods; 16 17 void product(int xiaohao1){ 18 machine=xiaohao1; 19 System.out.prin

2016/05/15 ThinkPHP3.2.2 表单自动验证实例 验证规则的数组 直接写在相应的控制器里

使用TP 3.2框架 验证规则也可以写到模型里,但感觉有些麻烦, 一是有时候不同页面验证的方式会不一样, 二是看到这个   Add  事件里的代码,就清楚要接收什么数据,如何验证数据能够在第一眼有个大致了解 ①控制器代码页 1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 5 header("Content-type: text/html; charset=utf-8"); 6 7 class AddCo