博客
关于我
Codeforces 471D. MUH and Cube Walls(差分 + KMP,93 ms)
阅读量:709 次
发布时间:2019-03-21

本文共 1462 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要计算在熊的墙中有多少个连续的长度为w的窗口能够与大象的墙高度序列匹配。通过调整每个木塔的高度,使其在相对变化的序列上与大象的墙匹配。

方法思路

  • 问题分析:熊和大象分别建造了两堵木头墙。我们需要找到熊的墙中有多少个窗口,其高度序列可以通过调整来与大象的墙匹配。关键在于相对高度变化的序列一致。

  • 差分数组:计算熊和大象墙的差分数组。差分数组中的每个元素表示相邻高度的差。通过比较差分数组,我们可以简化相对高度调整的问题。

  • KMP算法:使用KMP算法来匹配两个差分数组。KMP算法有效地寻找字符串匹配,可以在线性时间内处理大数组。

  • 解决代码

    #include 
    #include < earmark > // 为了避免警告#pragma warning(disable:4996)int main() { int n, w; scanf("%d%d", &n, &w); if (w == 1) { printf("%d\n", n); return 0; } int a[200002], b[200002]; for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); } for (int i = 1; i <= w; ++i) { scanf("%d", &b[i]); } int da[200002], db[200002]; for (int i = 1; i <= n-1; ++i) { da[i] = a[i] - a[i-1]; } for (int i = 1; i <= w-1; ++i) { db[i] = b[i] - b[i-1]; } if (n < w) { printf(0); return 0; } int next[200002]; int class1, class2, class3, class4; template
    void getnext(pattern* p, nexttype* next, size_t plen); template
    int KMParray(pattern* p, nexttype* next, size_t plen, size_t targetlen); int ret = KMParray(db + 1, next, w-1, n-1); printf("%d\n", ret); return 0;}

    代码解释

  • 输入处理:读取输入的n和w,以及熊和大象的墙高度数组a和b。
  • 差分数组计算:计算熊和大象的墙的差分数组da和db。
  • 特殊情况处理:如果w=1,直接输出n,因为每个位置都是一个单独的窗口。
  • KMP预处理:构建KMP算法需要的LPS数组,用于预处理模式匹配。
  • KMP匹配:运行KMP算法,在熊的差分数组da中寻找与大象的差分数组db匹配的子序列。
  • 输出结果:输出匹配的结果次数。
  • 通过这种方法,我们可以在较高效的时间复杂度内解决问题,适用于大规模数据。

    转载地址:http://umtez.baihongyu.com/

    你可能感兴趣的文章
    MySQL 8.0 恢复孤立文件每表ibd文件
    查看>>
    MySQL 8.0开始Group by不再排序
    查看>>
    mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
    查看>>
    multi swiper bug solution
    查看>>
    MySQL Binlog 日志监听与 Spring 集成实战
    查看>>
    MySQL binlog三种模式
    查看>>
    multi-angle cosine and sines
    查看>>
    Mysql Can't connect to MySQL server
    查看>>
    mysql case when 乱码_Mysql CASE WHEN 用法
    查看>>
    Multicast1
    查看>>
    mysql client library_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...
    查看>>
    MySQL Cluster 7.0.36 发布
    查看>>
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    MySQL Cluster与MGR集群实战
    查看>>
    multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
    查看>>
    mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
    查看>>
    Multiple websites on single instance of IIS
    查看>>
    mysql CONCAT()函数拼接有NULL
    查看>>
    multiprocessing.Manager 嵌套共享对象不适用于队列
    查看>>
    multiprocessing.pool.map 和带有两个参数的函数
    查看>>