JZOJ 5437. 【NOIP2017提高A组集训10.31】Sequence
来源:互联网 发布:单片机原理图设计 编辑:程序博客网 时间:2024/06/05 20:15
题目
题解
可以想象一下两个函数图像,就是问有几段长度为m的,a函数往下平移一个常数与b函数重合。
问题转化为:差分之后,有多少条连续m个元素的序列和另一个序列完全一样。
上一波KMP,
记得KMP匹配到m之后,就当匹配失败,此时j=next[j]。
代码
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define N 1000010#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;int i,j,k,l,n,m,ans;int a[N],b[N];int p[N],s[N],t[N];int read(){ int res=0,fh=1;char ch; while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')fh=-1,ch=getchar(); while(ch>='0'&&ch<='9')res=res*10+ch-'0',ch=getchar(); return res*fh;}int main(){ n=read(),m=read(); fo(i,1,n)a[i]=read(); fo(i,1,m)b[i]=read(); fo(i,2,n)s[i-1]=a[i]-a[i-1]; fo(i,2,m)t[i-1]=b[i]-b[i-1]; p[1]=0;j=0; fo(i,2,m-1){ while(j&&t[j+1]!=t[i])j=p[j]; if(t[j+1]==t[i])j++; p[i]=j; } j=0; fo(i,1,n-1){ while(j&&t[j+1]!=s[i])j=p[j]; if(t[j+1]==s[i])j++; if(j==m-1)ans++,j=p[j]; } printf("%d",ans); return 0;}
阅读全文
1 0
- JZOJ 5437. 【NOIP2017提高A组集训10.31】Sequence
- JZOJ 5437. 【NOIP2017提高A组集训10.31】Sequence
- 【JZOJ 5438】【NOIP2017提高A组集训10.31】Tree
- 【JZOJ 5439】【NOIP2017提高A组集训10.31】Calculate
- JZOJ 5439. 【NOIP2017提高A组集训10.31】Calculate
- JZOJ 5438. 【NOIP2017提高A组集训10.31】Tree
- JZOJ 5438. 【NOIP2017提高A组集训10.31】Tree
- JZOJ 5439. 【NOIP2017提高A组集训10.31】Calculate
- JZOJ5437. 【NOIP2017提高A组集训10.31】Sequence
- JZOJ 5432. 【NOIP2017提高A组集训10.28】三元组
- 【JZOJ 5432】【NOIP2017提高A组集训10.28】三元组
- JZOJ 5407. 【NOIP2017提高A组集训10.21】Deep
- JZOJ 5408. 【NOIP2017提高A组集训10.21】Dark
- 【JZOJ 5409】【NOIP2017提高A组集训10.21】Fantasy
- JZOJ 5410. 【NOIP2017提高A组集训10.22】小型耀斑
- 【JZOJ 5410】【NOIP2017提高A组集训10.22】小型耀斑
- 【JZOJ 5411】【NOIP2017提高A组集训10.22】友谊
- JZOJ 5414. 【NOIP2017提高A组集训10.22】幸运值
- Python的列表推导式,字典推导式,集合推导式使用方法
- SDK-IOS 关于SDK接入 MAC平台笔记
- 初学Qt:QLineEdit类信号总结
- 2017年10月31日作业
- canvas贪吃蛇
- JZOJ 5437. 【NOIP2017提高A组集训10.31】Sequence
- Android设计模式之——中介者模式
- 浅谈 c++中的 向上转型
- Linux定时延时机制
- 动态规划O
- html5初学2
- 【STL】map和set的使用
- springboot默认的组件扫描规则
- 2017.10.31