博客
关于我
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/

    你可能感兴趣的文章
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>