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

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

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

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

 #include <iostream>
#include <cstring>
#include <cstdio>
#define inf
char s[],p[];
int next[];
int lens,lenp,n;
using namespace std;
void getnext()
{
int j=-,i=;
next[]=-;
while (i!=lenp)
{
if (j==- || s[i]==s[j])
next[++i]=++j;
else
j=next[j];
}
}
int KMP()
{
int i=,j=,count=;
while (i!=lens && j!=lenp)
{
if (s[i]==p[j]||j==-)
++i,++j;
else
j=next[j];
if (j==lenp)
{
count++;
j=next[j];
}
}
return count;
}
int main()
{
int z;
scanf("%d",&z);
for (int zz=; zz<=z; zz++)
{
scanf("%s%s",p,s);
lens=strlen(s);
lenp=strlen(p);
//memset(next,0,sizeof(next));
getnext();
int ans=KMP();
printf("%d\n",ans);
}
}

第一种

 #include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 1000100
int n,fix,ans,i,lens,lent;
char s[maxn],t[maxn];
int next[maxn];
void getnext()
{
fix=;
for (fix,i=; i<=lent; i++)
{
while(fix && t[fix+]!=t[i]) fix=next[fix];
if (t[fix+]==t[i]) fix++;
next[i]=fix;
}
}
int KMP()
{
int count;
fix=; count=;
for (int i=; i<=lens; i++)
{
while (fix && t[fix+]!=s[i]) fix=next[fix];
if (t[fix+]==s[i]) fix++;
if (fix==lent)
{
count++;
fix=next[fix];
}
}
return count;
}
int main()
{
int z;
scanf("%d",&z);
for (int zz=; zz<=z; zz++)
{
scanf("%s",t+);
scanf("%s",s+);
lens=strlen(s+); lent=strlen(t+);
memset(next,,sizeof(next));
getnext();
ans=KMP();
printf("%d\n",ans);
}
}

第二种

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

  1. POJ 3641 Pseudoprime numbers (数论+快速幂)

    题目链接:POJ 3641 Description Fermat's theorem states that for any prime number p and for any integer a ...

  2. 2016.8.15上午纪中初中部NOIP普及组比赛

    2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...

  3. 2016.9.15初中部上午NOIP普及组比赛总结

    2016.9.15初中部上午NOIP普及组比赛总结 2016.09.15[初中部 NOIP普及组 ]模拟赛 又翻车了!表示时超和空超很可恨! 进度 比赛:AC+0+0+20=120 改题:AC+80+ ...

  4. POJ 3641 快速幂+素数

    http://poj.org/problem?id=3641 练手用,结果念题不清,以为是奇偶数WA了一发 #include<iostream> #include<cstdio> ...

  5. poj 3641 Pseudoprime numbers

    题目连接 http://poj.org/problem?id=3641 Pseudoprime numbers Description Fermat's theorem states that for ...

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

    雷电3外接显卡效果还不错,但是除了akitio node 其他厂家并不会维护自己的固件来适配新机型,我自己买的mbp 2016 15''就出现了和AORUS Gaming Box 1070不兼容的问题 ...

  7. POJ 1068 AC 2014-01-07 15:24 146人阅读 评论(0) 收藏

    POJ的题目都是英文的,所以,,,还是直接贴代码吧 #include<stdio.h> int main(){ int x,y,z; int n,nm,max; scanf("% ...

  8. poj 3641 Pseudoprime numbers Miller_Rabin测素裸题

    题目链接 题意:题目定义了Carmichael Numbers 即 a^p % p = a.并且p不是素数.之后输入p,a问p是否为Carmichael Numbers? 坑点:先是各种RE,因为po ...

  9. [位运算] [搜索] [递推优化] [计算几何] TEST 2016.7.15

    NOIP2014 提高组模拟试题 第一试试题 题目概况: 中文题目名称 合理种植 排队 科技节 源程序文件名 plant.pas/.c/.cpp lineup.pas/.c/.cpp scifest. ...

随机推荐

  1. 移动WEB开发资源

    很多移动开发的资源 http://www.cnblogs.com/PeunZhang/p/3407453.html

  2. 手机号码抽奖系统(JS)

    <html><head><title>手机号码抽奖</title><meta http-equiv="Content-Type" ...

  3. listview设置条目点击的时候不变色(让状态选择器不起作用)

    未设置前的效果如下图: 很明显,“酷狗音乐”那个条目被点击的时候,条目背景变为蓝色,怎么去掉这个颜色呢? java代码可以这么写: listView.setSelector(new ColorDraw ...

  4. 【摘自网络】dll库和lib库有什么区别

    简单地讲:第一:.DLL是动态链接库,而.LIB是静态链接库dll是个编译好的程序,调用时可以直接调用其中的函数,不参加工程的编译. 而lib应该说是一个程序集, 只是把一些相应的函数总结在一起, 如 ...

  5. Ubuntu和Redhat(Debian)的差别

    这两个最大的区别在包管理模式上. 都是用的Linux核心构架的. Redhat主要集中在 企业级服务器版的制作 是推动LINUX商业化最成功的公司 Redhat对应的桌面版制作 都是由Fedora社区 ...

  6. Oracle教程-查询(二)

    emp 雇员表字段名称   数据类型       是否为空   备注--------   -----------   --------   --------EMPNO    NUMBER(4)     ...

  7. P3P解决cookie存取的跨域问题

    最近在做一个流量统计的东西的时候,偶然发现IE在对iframe里面的页面写Cookie的时候有一些安全限制,导致读取Cookie不成功,找了好长时间的解决办法,重要找到如下的办法: 1.页面里的COO ...

  8. libtiff库使用

    此文章为了记录我在使用libtiff库中的一些问题而写,将不断补充. libtiff库是读取和写入tiff文件最主要的一个开源库,但文档写的实在不敢恭维.相对资料也是异常稀少. libtiff库的安装 ...

  9. MyEclipse中提示SpringMVC的XML配置文件出错解决方法

    手动添加schema文件,方法如下: 1,依次选择:windwos->preferences->myeclipse->files and editors->xml->xm ...

  10. Bootstrap-dialog的使用(续Bootstrap Table)

    Bootstrap-dialog实现表格内容的增,删,改. 插件引入:必须先引入jquery和bootstrap和artTemplate. <link rel="stylesheet& ...