CF2123D Binary String Battle
题目描述
Alice 和 Bob 得到一个长度为 $n$ 的二进制字符串 $s$,以及一个整数 $k$($1\leq k < n$)。
如果 Alice 能够将 $s$ 的所有字符都变成 $0$,则 Alice 获胜。如果 Alice 无法在有限步内获胜,则 Bob 获胜。
Alice 和 Bob 轮流操作,Alice 先手。
- 在 Alice 的回合,她可以选择 $s$ 中任意一个长度为 $k$ 的子序列 $^{\text{∗}}$,然后将该子序列中的所有字符都变为 $0$。
- 在 Bob 的回合,他可以选择 $s$ 中任意一个长度为 $k$ 的子串 $^{\text{†}}$,然后将该子串中的所有字符都变为 $1$。
注意,只要在游戏过程中(包括 Alice 和 Bob 的回合之间),字符串全部变为 $0$,Alice 就立即获胜。
请判断在双方都采取最优策略的情况下,谁会获胜。
$^{\text{∗}}$ 字符串 $s$ 的子序列是 $s$ 中若干字符组成的集合,这些字符不必相邻。
$^{\text{†}}$ 字符串 $s$ 的子串是 $s$ 中一段连续的字符,这些字符必须相邻。
输入格式
第一行包含一个整数 $t$($1 \leq t \leq 10^4$),表示测试用例的数量。
每个测试用例的第一行包含两个整数 $n$ 和 $k$($2\leq n \leq 2\cdot 10^5$,$1\leq k < n$)。
每个测试用例的第二行包含一个长度为 $n$ 的二进制字符串 $s$。
保证所有测试用例中 $n$ 的总和不超过 $2\cdot 10^5$。
输出格式
对于每个测试用例,输出一行,如果 Alice 能在最优策略下获胜,则输出 "Alice";否则输出 "Bob"。
输出不区分大小写。例如,"aLiCe"、"alice"、"ALICE" 和 "alICE" 都会被识别为 "Alice"。
说明/提示
在第三个样例中,Alice 可以选择由 $s_2$ 组成的子序列,将 $s$ 变为 $000000$,她立即获胜。
在第四个样例中,可以证明 Alice 无法保证在有限步内将 $s$ 变为 $0000$。
由 ChatGPT 4.1 翻译