首页 > 其他分享 >CF471D MUH and Cube Walls

CF471D MUH and Cube Walls

时间:2023-01-22 21:44:43浏览次数:51  
标签:Cube int 1000005 CF471D 差分 Walls 数组 MUH

简要题意

题目传送门

平面上有两堵墙 \(a,b\)。长度分别为 \(n,w\)。求 \(a\) 墙顶端有多少个区间与 \(b\) 墙顶端一样。

\(1\le n,w \le 2 \times 10^5,1 \leq a_i,b_i \leq 10^9\)

代码

先用一下样例的图进行分析:

image

可以发现,顶端的形状取决于从 \(i\) 到 \(i+1\) 上升或下降了多少格,而不取决于每一个地方的具体高度。自然想到差分数组。

我们求出 \(a,b\) 两堵墙的差分数组后,就可以 \(b\) 为模式串在 \(a\) 上跑 KMP 了。

注意这个做法有一个缺陷,就是在 \(w=1\) 的时候答案是 \(n\),我们会输出 \(n-1\)。这是因为差分数组比原数组少一个元素导致的。我们特判一下即可。

时间复杂度 \(O(n+w)\)。

代码

这里给出的是传统实现,看不懂题解的拼接两个数组的写法。

#include <bits/stdc++.h>
#define int long long
using namespace std;

int n,m;
int A[1000005],B[1000005];
int fail[1000005];

signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>A[i];
    for(int i=1;i<=m;i++) cin>>B[i];
    for(int i=1;i<n;i++) A[i]-=A[i+1];
    for(int i=1;i<m;i++) B[i]-=B[i+1];
    n--;m--;
    for(int i=2,j=0;i<=m;i++){
        while(j&&B[i]!=B[j+1]) j=fail[j];
        if(B[j+1]==B[i]) j++;
        fail[i]=j;
    }
    int ans=0;
    for(int i=1,j=0;i<=n;i++){
        while(j&&B[j+1]!=A[i]) j=fail[j];
        if(A[i]==B[j+1]) j++;
        if(j==m){ans++;j=fail[j];}
    }
    cout<<ans;
    return 0;
}

标签:Cube,int,1000005,CF471D,差分,Walls,数组,MUH
From: https://www.cnblogs.com/zheyuanxie/p/cf417d.html

相关文章

  • HAL库教程2:使用STM32CubeMX新建一个工程
    安装STM32CubeMX  安装STM32CubeMX之前,电脑中要有java运行时环境(JRE),否则会报错:  双击JavaSetup8u201.exe即可安装JRE。在安装过程中,需要在线下载一些资源,所以应当保持......
  • HAL库教程1:STM32Cube的介绍
      使用STM32HAL库已经有了一段时间,觉得相比于标准库,好用了不少。加上STM32CubeMX图形化配置工具的加持,个人认为可以极大提升开发效率。其实关于HAL库的教程已经很多了,关于......
  • 第一周训练赛 B-Jumping on Walls
    题目描述Vasyaplaysacomputergamewithninjas.AtthisstageVasya'sninjashouldgetoutofadeepcanyon.Thecanyonconsistsoftwoverticalparallelwal......
  • cube的绘制以及图片的完整显示
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassCreatUVCube:MonoBehaviour{publicMeshFiltermf;publicMeshR......
  • stm32cubeIDE,双通道ADC+DMA配置
    双通道配置ADC_IN1和ADC_IN3        写下开始函数可用adc采集      ......
  • UVA13197 Cuberoot This 题解
    题目传送门题目大意求满足\(x^3\bmodp=a\)且\(x<p\)的数\(x\),升序输出。解题思路在\(0\)到\(p-1\)的范围内,查找满足条件的\(x\);值得注意的是,输出要留意:最......
  • CubeMX使用FreeRTOS编程指南
    文章目录CubeMX使用FreeRTOS编程指南一、开发前言1.1软件准备1.2开启FreeRTOS二、配置界面三、系统设置2.1调度内核设置2.2内存管理设置2.3钩子函数配置2.5......
  • Unity shader cube纹理采样
    使用cube进行纹理采样,可以很方便的预览全景图,可以用立方体去显示全景图,而不必非得用球甚至还可以用更复杂的网格去贴全景图,只要保证网格的形状和全景图里的内容能对应上就......
  • CubeMX+FreeRTOS点灯
    一、CubeMX配置 1、选择时钟源,选择TIM1,网上推荐freertos使用除systick以外的timebase,网上找到的原因是防止高于systick优先级的服务调用HAL_Delay(),导致服务无法返回。......
  • STM32CubeIDE COMP与DAC配合使用
    1、配置DAC  2、配置COMP,COMP1_INP设置成SwtichwithDAC_OUT1使两者内部相连,即外部输入引脚COMP1_INM会与DAC_OUT1引脚的电平比较,大于或者小于设定DAC电压阈值会触......