#P15427. [ICPC 2026 APC] Minesweeper String

    ID: 14642 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 7 上传者: 标签>CF2200FFT多项式数学差分字符串前缀和

[ICPC 2026 APC] Minesweeper String

题目描述

给定一个由数字 0099 组成的字符串 SS,长度为 nn。你需要用这个字符串生成一个变种的扫雷游戏。在这个变种中,一个格子可以包含多个地雷,并且每个格子的地雷数是基于其“4 邻域”(与其边相邻的格子),而不是传统的 8 邻域。

具体过程如下:

你选择一个整数 ww1wn1 \le w \le n)作为网格的宽度。将 nn 个格子(编号 00n1n-1)按顺序排列成网格。网格共有 n/w\left\lceil n / w \right\rceil 行(从上到下编号为 00n/w1\left\lceil n / w \right\rceil-1),和 ww 列(从左到右编号为 00w1w-1)。对于每个 0i<n0 \leq i < n,编号为 ii 的格子位于第 i/w\left\lfloor i/w \right\rfloor 行、第 imodwi \bmod w 列,并对应 SS 的第 (i+1)(i+1) 位数字。因此,第 00 行包含格子 00w1w-1,第 11 行包含格子 ww2w12w-1,以此类推。注意,最底下一行可能不足 ww 个格子。

将格子排列好后,进行如下两步:

  1. 对于对应于非零数字 xx1199)的格子,在该格子中放入 xx 个地雷。
  2. 对于其余对应 00 的格子,在该格子里填写一个数字,表示与其相邻的所有格子中地雷的总数。两个格子相邻当且仅当它们有共同的边。每个格子至多有四个相邻的格子。

对于每个宽度 ww,定义 f(w)f(w) 为所有没有地雷的格子中填写数字之和。给定整数 kk,问 f(1),f(2),,f(n)f(1), f(2), \ldots, f(n)nn 个值中的第 kk 大值是多少。

输入格式

第一行输入两个整数 nnkk1kn5000001\leq k \leq n \leq 500\,000)。

第二行输入一个长度为 nn 的,仅包含数字 0099 的字符串 SS

输出格式

输出 f(1),f(2),,f(n)f(1), f(2), \ldots, f(n) 中的第 kk 大的值。

输入输出样例 #1

输入 #1

5 3
20103

输出 #1

7

输入输出样例 #2

输入 #2

5 1
20103

输出 #2

11

输入输出样例 #3

输入 #3

8 4
60409003

输出 #3

35

说明/提示

示例输入输出 #1 说明

下图展示了所有 55 种宽度下的网格。每个格子的点表示一个地雷。

图 F.1:所有 55 种可能的宽度下生成的网格。

将所有没有地雷格子的数字相加,可以得到如下结果:

  • f(1)=7f(1) = 7
  • f(2)=3f(2) = 3
  • f(3)=11f(3) = 11
  • f(4)=4f(4) = 4
  • f(5)=7f(5) = 7

33 大的值为 77