[HDU1711]KMP模板
解题关键:1、直接套kmp模板即可,注意最后输出的位置,需要在索引的位置+1。
2、next用作数组名在oj中会编译错误,
3、选用g++,只有g++才会接受bits/stdc++.h
OJ中g++和c++的区别:
1、输出double类型时,如果采用G++提交,scanf采用%lf,printf采用%f,否则会报错
2、使用GCC/G++的提醒:
对于64位整数, long long int 和 __int64 都是支持并且等价的.但是在读和写的时候只支持scanf("%
I64d", ...)和printf("%I64d", ...).
不支持"%lld"是因为MinGW下的GCC和G++使用的msvcrt.dll动态链接库并不支持C99标准.
根据ISO C++标准,在G++下,main函数的返回值必须是int,否则将会导致Compile Error(编译错误)的判答
3、G++/GCC使用scanf、printf时注意引用<stdio.h>,只引用<iostream>不识别
#include<bits/stdc++.h>
#define N 1000002
using namespace std;
typedef long long ll;
int Next[N];
int s[N],t[N];
int slen,tlen;
int n,m;
void getNext(){
int i=,j=-;
Next[]=-;
while(i<tlen){
if(j==-||t[i]==t[j]) Next[++i]=++j;
else j=Next[j];
}
}
int kmp(){
getNext();
int i=,j=;
while(i<slen&&j<tlen){
if(j==-||s[i]==t[j]) ++i,++j;
else j=Next[j];
}
if(j==tlen) return i-j+;
else return -;
}
int main(){
ios::sync_with_stdio();
int tt;
cin>>tt;
while(tt--){
int n,m;
cin>>n>>m;
for(int i=;i<n;i++){
cin>>s[i];
}
for(int i=;i<m;i++){
cin>>t[i];
}
slen=n;
tlen=m;
cout<<kmp()<<endl;
}
}
#include<bits/stdc++.h>
#define N 1000000
using namespace std;
typedef long long ll;
char s[N],t[N];
int Next[N];
int slen,tlen;
void getNext(){
int i=,j=-;//注意写next数组时j为-1
Next[]=-;
while(i<tlen){
if(j==-||t[i]==t[j]) Next[++i]=++j;
else j=Next[j];
}
}
int kmp_index(){
getNext();
int i=,j=;
while(i<slen&&j<tlen){
if(j==-||s[i]==t[j]) i++,j++;
else j=Next[j];
}
if(j==tlen) return i-j;
else return -;
}
int kmp_count(){
int ans=,i=,j=;
getNext();
for(i=;i<slen;i++){
while(j>&&s[i]!=t[j]) j=Next[j];
if(s[i]==t[j]) j++;
if(j==tlen){
ans++;
j=Next[j];
}
}
return ans;
}
[HDU1711]KMP模板的更多相关文章
- hdu 1686 KMP模板
// hdu 1686 KMP模板 // 没啥好说的,KMP裸题,这里是MP模板 #include <cstdio> #include <iostream> #include ...
- Oulipo HDU 1686 KMP模板
题目大意:求模式串在主串中的出现次数. 题目思路:KMP模板题 #include<iostream> #include<algorithm> #include<cstri ...
- KMP模板(bin)
KMP模板 主要是kuangbin的模板,之后加了一点我的习惯和理解. kmpN() 作用:构造next数组 参数:模式串,模式串长度 kmpC() 作用:返回模式串在主串中出现的次数(可重复) 参数 ...
- HDU 1711 - Number Sequence - [KMP模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory L ...
- HDU 1711 Number Sequence(KMP模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. #include<iostream> #include<cs ...
- 剪花布条---hdu2087(kmp模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 kmp模板题: #include <cstdio> #include <cst ...
- Oulipo----poj3461(kmp模板)
题目链接:http://poj.org/problem?id=3461 和 减花布条 的题对比一下: 求s2中s1的个数kmp模板: #include<stdio.h> #include& ...
- kmp模板 && 扩展kmp模板
kmp模板: #include <bits/stdc++.h> #define PB push_back #define MP make_pair using namespace std; ...
- kuangbin专题16B(kmp模板)
题目链接: https://vjudge.net/contest/70325#problem/B 题意: 输出模式串在主串中出现的次数 思路: kmp模板 在 kmp 函数中匹配成功计数加一, 再令 ...
随机推荐
- Android中子线程真的不能更新UI吗?
Android的UI访问是没有加锁的,这样在多个线程访问UI是不安全的.所以Android中规定只能在UI线程中访问UI. 但是有没有极端的情况?使得我们在子线程中访问UI也可以使程序跑起来呢?接下来 ...
- 小程序getApp() 被删除坑
在一个非page的js文件内使用getApp,当前台切到后台的时候,定义的var app = getApp()被删除了 如:新建一个app-libs.js start: function() { va ...
- Ruby 循环
Ruby while 语句: 语法: while conditional [do] codeend 执行代码当条件为true时.while循环的条件是代码中的保留字,换行,反斜杠()或一个分号隔开. ...
- DNS 原理入门 (转)
DNS 是互联网核心协议之一.不管是上网浏览,还是编程开发,都需要了解一点它的知识. 本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作.我的目标是,读完此文后,你就能完全理解DNS. 一.D ...
- 【leetcode刷题笔记】Distinct Subsequences
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- 0428 正则表达式 re模块
复习 异常处理try except 一定要在except之后写一些提示或者处理的内容 try: '''可能会出现异常的代码'''except ValueError: '''打印一些提示或者处理的内容' ...
- 动态顺序表(C++实现)
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的 ...
- Docker-为镜像添加SSH服务
进入容器的办法有很多,包括exec.attach等命令,但是这些命令都无法解决远程管理容器的问题,因此,需要SSH的支持 基于commit命令创建 docker提供了docker commit命令,支 ...
- HDU 4714 Tree2cycle:贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...
- POJ 2831 Can We Build This One:次小生成树【N^2预处理】
题目链接:http://poj.org/problem?id=2831 题意: 给你一个图,每条边有边权. 然后有q组询问(i,x),问你如果将第i条边的边权改为x,这条边是否有可能在新的最小生成树中 ...