poj 3641 ——2016——3——15
传送门: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的更多相关文章
- POJ 3641 Pseudoprime numbers (数论+快速幂)
题目链接:POJ 3641 Description Fermat's theorem states that for any prime number p and for any integer a ...
- 2016.8.15上午纪中初中部NOIP普及组比赛
2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...
- 2016.9.15初中部上午NOIP普及组比赛总结
2016.9.15初中部上午NOIP普及组比赛总结 2016.09.15[初中部 NOIP普及组 ]模拟赛 又翻车了!表示时超和空超很可恨! 进度 比赛:AC+0+0+20=120 改题:AC+80+ ...
- POJ 3641 快速幂+素数
http://poj.org/problem?id=3641 练手用,结果念题不清,以为是奇偶数WA了一发 #include<iostream> #include<cstdio> ...
- poj 3641 Pseudoprime numbers
题目连接 http://poj.org/problem?id=3641 Pseudoprime numbers Description Fermat's theorem states that for ...
- macbook pro 2016 2017 15寸 雷电3 外接显卡 epu 简单教程(不修改UEFI)
雷电3外接显卡效果还不错,但是除了akitio node 其他厂家并不会维护自己的固件来适配新机型,我自己买的mbp 2016 15''就出现了和AORUS Gaming Box 1070不兼容的问题 ...
- 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("% ...
- poj 3641 Pseudoprime numbers Miller_Rabin测素裸题
题目链接 题意:题目定义了Carmichael Numbers 即 a^p % p = a.并且p不是素数.之后输入p,a问p是否为Carmichael Numbers? 坑点:先是各种RE,因为po ...
- [位运算] [搜索] [递推优化] [计算几何] TEST 2016.7.15
NOIP2014 提高组模拟试题 第一试试题 题目概况: 中文题目名称 合理种植 排队 科技节 源程序文件名 plant.pas/.c/.cpp lineup.pas/.c/.cpp scifest. ...
随机推荐
- java反射简解
1.首先一个问题,什么是类,类是不是对象? 我们总是说我们new一个对象出来 那么我们还没有new的时候,建造的那个java类是不是对象呢? 是 它是java.lang.Class的对象 对于反射我们 ...
- hdu_5418_Victor and World(状压DP+Floyd)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题意:给你n个点,和一些边,找一条路径经过全部的点,并回到起点,问最小的花费是多少, 题解:m& ...
- Entity Framework 学习中级篇1—EF支持复杂类型的实现
本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...
- HDU1425 <sort 快排>
给你n个整数,请按从大到小的顺序输出其中前m大的数. 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,5000 ...
- Mac 生产力探究
转载自:http://devtian.me/2015/04/15/about-my-productivity-tool-in-MacOSX/ ##密码管理器 1Password 1Password 是 ...
- margin问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 转:web_url函数学习
web_url语法: Int Web_url(const char *name, const char * url, <Lists of Attributes>, [EXTR ...
- line-box(转)
inline-block是什么? Inline-block是元素display属性的一个值.这个名字的由来是因为,display设置这个值的元素,兼具行内元素( inline elements)跟块级 ...
- A标签中通过href和onclick传递的this对象
在blog的后台管理中允许为一个分类添加一个地址,但是不好添加onclick事件.想传递当前对象给一个函数,于是就将这个URL写成"Javascript:shoControlSidebar( ...
- Gson通过借助TypeToken获取泛型参数的类型的方法
最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使 ...