博客
关于我
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 – 导出数据成csv
    查看>>
    MySQL —— 在CentOS9下安装MySQL
    查看>>
    MySQL —— 视图
    查看>>
    mysql 不区分大小写
    查看>>
    mysql 两列互转
    查看>>
    MySQL 中开启二进制日志(Binlog)
    查看>>
    MySQL 中文问题
    查看>>
    MySQL 中日志的面试题总结
    查看>>
    mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
    查看>>
    MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
    查看>>
    Mysql 中的日期时间字符串查询
    查看>>
    mysql 中索引的问题
    查看>>
    MySQL 中锁的面试题总结
    查看>>
    MySQL 中随机抽样:order by rand limit 的替代方案
    查看>>
    MySQL 为什么需要两阶段提交?
    查看>>
    mysql 为某个字段的值加前缀、去掉前缀
    查看>>
    mysql 主从
    查看>>
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主从关系切换
    查看>>