#lg6878. [JOI 2020 Final] JJOOII 2

[JOI 2020 Final] JJOOII 2

AdditionalFile3253.zip

P6878 [JOI 2020 Final] JJOOII 2

题目描述

定义有连续 KKJ\tt J 和连续 KKO\tt O 和连续 KKI\tt I 组成的字符串为 KK 阶 JOI 串。

比如,JJOOII\tt JJOOII22 阶 JOI 串,但是,注意要有顺序,比如 OOJJII\tt OOJJII 就不是 22 阶 JOI 串。

现在,给定一个长度为 NN 的字符串 SS,可以对他进行 33 种操作:

  • 操作 11:删除 SS 开头的字符
  • 操作 22:删除 SS 结尾的字符
  • 操作 33:删除 SS 除了开头和结尾之外的一个字符

我们要通过这些操作让 SS 变为 KK 阶 JOI 串。

但是,我们想让操作 33 尽量的少。

所以我们想知道,变为 KK 阶 JOI 串操作 33 最少需要进行多少次?

如果不能变为 KK 阶 JOI 串,那么输出 1-1

输入格式

第一行两个整数 N,KN,K 代表字符串长度和要构造的 JOI 串的阶数。
第二行 NN 个字符代表字符串 SS

输出格式

一行一个整数代表操作 33 的最小进行次数。
如果不能变为 KK 阶 JOI 串,那么输出 1-1

输入输出样例 #1

输入 #1

10 2
OJIJOIOIIJ

输出 #1

2

输入输出样例 #2

输入 #2

9 3
JJJOOOIII

输出 #2

0

输入输出样例 #3

输入 #3

9 1
IIIOOOJJJ

输出 #3

-1

说明/提示

样例 1 解释

  1. 进行一次操作 11,变为 JIJOIOIIJ\tt JIJOIOIIJ
  2. 进行一次操作 22,变为 JIJOIOII\tt JIJOIOII
  3. 进行一次操作 33,删掉字符 22,变为 JJOIOII\tt JJOIOII
  4. 进行一次操作 33,删掉字符 44,变为 JJOOII\tt JJOOII

样例 2 解释

JJJOOOIII\tt JJJOOOIII 已经是 33 阶 JOI 串了,所以不需要进行操作。

样例 3 解释

IIIOOOJJJ\tt IIIOOOJJJ 无法变为 11 阶 JOI 串,无解。

数据规模与约定

本题采用捆绑测试。

  • Subtask 1(1 pts):N21N \le 21
  • Subtask 2(12 pts):N3000N \le 3000
  • Subtask 3(87 pts):无特殊限制。

对于 100%100\% 的数据:

  • 3N2×1053 \le N \le 2 \times 10^5
  • 1KN31 \le K \le \dfrac{N}{3}
  • SS 只包含 J\tt JO\tt OI\tt I 且长度为 NN

说明

翻译自 第19回日本情報オリンピック 本選 B JJOOII 2

#3253. 「JOI 2020 Final」JJOOII 2

标签: 传统 | 时间限制: 2000 ms | 内存限制: 256 MiB |

题目描述

译自 JOI 2020 Final T2「JJOOII 2 / JJOOII 2

比太郎收到了一个长度为 NN 的字符串 SS 作为他的生日礼物,且这个字符串仅由 J,O,I\texttt{J},\texttt{O},\texttt{I} 组成。

对于所有正整数 K K ,若一个字符串仅由 KK 个连续的 J\texttt JKK 个连续的 O\texttt OKK 个连续的 I\texttt I 顺次连接而成,则我们称这个字符串为 KK 级 JOI-串
例如,JJOOII\texttt{JJOOII} 就是一个 22 级 JOI-串。

比太郎热衷于构造 KK 级 JOI-串,于是他打算通过以任意顺序使用以下三个操作任意次来将字符串 SS 构造为一个 KK 级 JOI-串:

  1. 删除 SS 的开头字符。
  2. 删除 SS 的结尾字符。
  3. 删除 SS 的一个非开头且非结尾的字符。

由于操作 33 十分耗时,比太郎想要尽可能少地使用操作 33
请对于给定的长度为 NN 的字符串 SS 和一个正整数 KK,输出将其构造为 KK 级 JOI-串所需要的最少的操作 33 的次数。
若无解,请输出 1-1

输入格式

第一行,两个正整数 N,KN,K
第二行,一个字符串 SS

输出格式

一行,一个整数,表示操作 33 的最少次数或 1-1

样例 1

输入

10 2
OJIJOIOIIJ

输出

2

你可以通过按以下顺序执行操作来将 SS 构造为一个 KK 级 JOI-串:

  1. 使用操作 11SS 变为 JIJOIOIIJ\texttt{JIJOIOIIJ}
  2. 使用操作 22SS 变为 JIJOIOII\texttt{JIJOIOII}
  3. 使用操作 33 删除第 22 个字符,SS 变为 JJOIOII\texttt{JJOIOII}
  4. 使用操作 33 删除第 44 个字符,SS 变为 JJOOII\texttt{JJOOII}

可以证明没有更优解,故输出 22

样例 2

输入

9 3
JJJOOOIII

输出

0

显然,在这个样例中你甚至不需要任何操作。

样例 3

输入

9 1
IIIOOOJJJ

输出

-1

显然,在这个样例中你的一切操作都是无用功。

数据范围与提示

对于所有测试数据,3N2×105,1KN3,S3 \le N \le 2 \times 10^5, 1 \le K \le \frac N3, S 是一个仅有 J,O,I\texttt J, \texttt O, \texttt I 组成的字符串。

子任务编号 分值 NN
11 11 N21N \le 21
22 1212 N3000N \le 3000
33 8787