zoukankan      html  css  js  c++  java
  • CF471D MUH and Cube Walls

    题意

    传送门

    给两堵墙。问a墙中与b墙顶部形状相同的区间有多少个

    分析

    KMP+差分

    根据样例解释,我们很容易就能发现:

    这里所求的形状,实质上其实就是相邻两个墙的高度的差来确定的

    只要差相等,那么形状不就相等了

    所以我们考虑将原数组差分,然后这里问的是相等的区间,就是将两个差分数组进行匹配

    那么直接KMP,匹配到了多少个答案就是多少,套板子即可

    代码

    #include<bits/stdc++.h>
    using namespace std;
    template <typename T>
    inline void read(T &x){
        x=0;char ch=getchar();bool f=false;
        while(!isdigit(ch)){if(ch=='-'){f=true;}ch=getchar();}
        while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
        x=f?-x:x;
        return ;
    }
    template <typename T,typename... Args> inline void read(T& t, Args&... args){read(t);read(args...);}
    template <typename T>
    inline void write(T x){
        if(x<0) putchar('-'),x=-x;
        if(x>9) write(x/10);
        putchar(x%10^48);
        return ;
    }
    template <typename T>
    inline void print(T x){write(x),putchar(' ');}
    #define ll long long
    #define ull unsigned long long
    #define inc(x,y) (x+y>=MOD?x+y-MOD:x+y)
    #define dec(x,y) (x-y<0?x-y+MOD:x-y)
    #define min(x,y) (x<y?x:y)
    #define max(x,y) (x>y?x:y)
    const int N=2e5+5,M=1e6+5,MOD=1e9+7;
    int n,m,a[N],b[N],kmp[N<<1],ans;
    int main(){
        read(n),read(m);
    	if(m==1){write(n);return 0;}//注意特判
    	for(int i=1;i<=n;i++) read(a[i]);
    	for(int i=1;i<n;i++) a[i]-=a[i+1];
    	for(int i=1;i<=m;i++) read(b[i]);
    	for(int i=1;i<m;i++) b[i]-=b[i+1];
    	b[m]=-100009,n--;//相当于隔离的作用
    	for(int i=m+1;i<=m+n;i++) b[i]=a[i-m];//拼接两个字符串
    	for(int i=2,j=0;i<=n+m;i++){
    		while(j&&b[j+1]!=b[i]) j=kmp[j];
    		if(b[j+1]==b[i]) j++;
    		kmp[i]=j;
    		if(j==m-1) ans++;
    	}
    	write(ans);
        return 0;
    }
    
    
  • 相关阅读:
    BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法
    BZOJ_2693_jzptab_莫比乌斯反演
    BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS
    BZOJ_5301_[Cqoi2018]异或序列&&CF617E_莫队
    前端开发框架对比
    现在企业流行的java框架技术
    尼古拉斯·沃斯
    算法和流程图
    Java中DAO的实现
    java中的DAO设计模式
  • 原文地址:https://www.cnblogs.com/Akmaey/p/14200278.html
Copyright © 2011-2022 走看看