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

    你可能感兴趣的文章
    Nokia5233手机和我装的几个symbian V5手机软件
    查看>>
    Non-final field ‘code‘ in enum StateEnum‘
    查看>>
    none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
    查看>>
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad++最详情汇总
    查看>>
    notepad如何自动对齐_notepad++怎么自动排版
    查看>>
    Notification 使用详解(很全
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    Now trying to drop the old temporary tablespace, the session hangs.
    查看>>
    nowcoder—Beauty of Trees
    查看>>
    np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
    查看>>
    np.power的使用
    查看>>
    NPM 2FA双重认证的设置方法
    查看>>
    npm build报错Cannot find module ‘webpack‘解决方法
    查看>>
    npm ERR! ERESOLVE could not resolve报错
    查看>>