题目 20356

Reverse

查看题解 ↗GitHub ↗如何评测
题号
20356
标签
比赛NOIP
来源
2018 国庆雅礼集训 10-7

Reverse

reverse.cpp/in/out

  • 时间限制:1.0s
  • 空间限制:512MB

题目描述

小 G 有一个长度为 nn 的 01 串 TT,其中只有 TS=1T_S = 1,其余位置都是 0。现在小 G 可以进行若干次以下操作:

  • 选择一个长度为 KK 的连续子串(KK 是给定的常数),翻转这个子串。

对于每个 i, i∈[1,n]i,\ i \in [1, n],小 G 想知道最少要进行多少次操作使得 Ti=1T_i = 1。特别的,有 mm 个“禁止位置”,你需要保证在操作过程中 1 始终不在任何一个禁止位置上。

输入格式

从文件 reverse.in 中读入数据。

第一行四个整数 n,K,m,Sn, K, m, S。

接下来一行 mm 个整数表示禁止位置。

输出格式

输出到文件 reverse.out 中。

输出一行 nn 个整数,对于第 ii 个整数,如果可以通过若干次操作使得 Ti=1T_i = 1,输出最小操作次数,否则输出 −1-1。

样例 1 输入

文本
6 2 0 1

样例 1 输出

文本
0 1 2 3 4 5

样例 2 输入

文本
10 4 3 3
2 5 10

样例 2 输出

文本
2 -1 0 1 -1 1 2 3 2 -1

样例 3

见选手目录下的 reverse/reverse3.in 与 reverse/reverse3.ans。

样例 4

见选手目录下的 reverse/reverse4.in 与 reverse/reverse4.ans。

数据范围

对于所有数据,有 1≤n≤1051 \le n \le 10^5,1≤S,K≤n1 \le S, K \le n,0≤m≤n0 \le m \le n。保证 SS 不是禁止位置,但禁止位置可能有重复。

  • Subtask 1 (24%):n≤10n \le 10。
  • Subtask 2 (22%):n≤103n \le 10^3。
  • Subtask 3 (3%):K=1K = 1。
  • Subtask 4 (8%):K=2K = 2。
  • Subtask 5 (43%):没有特殊的约束。

数据下载

题目 20356 的公开数据

正在读取文件列表…

常用命令

题目 20356 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。