[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 函数中匹配成功计数加一, 再令 ...
随机推荐
- Yii2 高级查询
首先我们要自己写一个ActiveQuery 类并且继承 Yii2 的 ActiveQuery: namespace api\models; class ActiveQuery extends \yii ...
- HDU - 1114 Piggy-Bank 【完全背包】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1114 题意 给出一个储钱罐 不知道里面有多少钱 但是可以通过重量来判断 先给出空储钱罐的重量 再给出装 ...
- 第四篇、javascript
一.正则表达式 提示:此专题需要多轮复习反复的加深和理解 正则表达式的两种用法: 1)regexp.xxx(string); 2)string.yyy(regexp); 验证用户输入的手机号格式是否合 ...
- sdut oj 操作系统实验--SSTF磁盘调度算法【操作系统算法】
操作系统实验--SSTF磁盘调度算法 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 磁盘调度在多道程序设计的计算机系统中,各个进 ...
- 百度编辑器 Ueditor 如何增加字体 ?
在百度编辑器 Ueditor 如何增加字体 ? 要修改两个文件: 第一个文件:editor-config.js: ,'fontfamily':[ { label:'',name ...
- Java -- eclipse常用快捷键
- java:eclipse安装tomcat插件及配置tomcat
我们都知道myeclipse自带tomat图标,而eclipse却没有,若想eclipse实现带有tomcat图标可以下载tomcat插件 tomcat插件下载地址:http://www.eclips ...
- django-pagination分页
1. 将该APP安装至Django项目中.(settings.py) INSTALLED_APPS = ( # ... 'pagination', ) 2. 在Django项目的middleware中 ...
- 百度编辑器UEditor配置toolbars工具条功能按钮
两种方式: 1.代码中定义 <script id="container" name="content" type="text/plain&quo ...
- java-StringBuffer常用方法
对字符串进行修改的时候,需要使用可变长字符串StringBuffer 和 StringBuilder 类. append(String s):将指定的字符串追加到此字符序列. Reverse():将此 ...