1 条题解
-
0
题目题解
问题理解
给定长度为 的二进制字符串 和整数 ()。
Alice 先手,每轮:- Alice 选择任意长度为 的子序列(不一定连续),将其全部设为 。
- Bob 选择任意长度为 的子串(连续段),将其全部设为 。
若某一时刻字符串全为 ,Alice 立即获胜。双方最优,判断谁获胜。
第一步:Alice 直接获胜的条件
设 为字符串中 的个数。
$$\text{若 } cnt \le k \quad \Rightarrow \quad \text{Alice 胜}. $$
若 ,则 Alice 可以在第一回合选择所有 作为子序列(长度恰好为 ,若不足 可补 凑够 ),将所有 变为 ,立即获胜。
因此:
第二步:Bob 的胜利条件
Bob 获胜当且仅当他能保证在 Alice 的每个回合开始前,字符串中至少有 个 。
因为这样 Alice 每次最多只能翻转 个 ,而 Bob 能通过操作将至少 个位置变回 ,从而保持 的数量 。
第三步:当 时 Bob 获胜
若 ,Bob 有策略保证每次操作后 的数量 。
策略:
在 Bob 的回合,他先任意选择一个已有的 作为“保留位”(位置 ),然后选择一个长度为 且不包含 的子串。
由于 , 的左侧或右侧至少有 个位置,因此这样的子串一定存在。
Bob 将该子串全部设为 ,这样:- 该子串贡献 个 ,
- 保留位 本身就是 (未被影响),
因此总 的数量 。
由于 Bob 能在每轮保持 的数量 ,Alice 永远无法将全部 清零,因此 Bob 获胜。
第四步:当 时 Alice 获胜
若 ,Alice 有获胜策略。
关键观察:
当 时,任意长度为 的子串必然覆盖位置 (中间位置)。
特别地,所有长度为 的子串都包含第 个位置(取整后固定)。Alice 的策略:
她始终保留中间位置(记为 )的值为 ,直到最后一回合。
在每轮她的回合,她选择任意 个 (不包括 )变为 。
由于 ,除了 外,剩余位置数 ,但 Alice 总能找到 个 吗?需要确保 的数量足够。更精确的论证:
设 为当前 的数量。若 ,Alice 可以翻转 个 (避开 ),使 减少 。
随后 Bob 操作:他只能选择包含 的子串(因为所有长度为 的子串都包含 ),且 当前为 ,因此 Bob 最多只能将其他 个位置变为 。
因此,Bob 操作后, 的数量增加最多 。
所以每轮净减少至少 个 。由于 有限且严格递减,最终 会降至 ,此时 Alice 可以在下一轮直接清零获胜。
最终结论
综合以上:
$$\text{结果} = \begin{cases} \text{Alice}, & \text{if } cnt \le k \text{ 或 } n < 2k, \\ \text{Bob}, & \text{otherwise}. \end{cases} $$等价于:
- 若 ,Alice 胜。
- 否则,若 ,Alice 胜。
- 否则 Bob 胜。
算法步骤
- 读入 和字符串 。
- 统计 的个数 。
- 若 或 ,输出
"Alice";否则输出"Bob"。
时间复杂度
- 统计 :。
- 总复杂度 ,满足要求。
代码实现
#include <bits/stdc++.h> using namespace std; void solve() { int n, k; string s; cin >> n >> k >> s; int cnt = 0; for (char c : s) { if (c == '1') cnt++; } if (cnt <= k || n < 2 * k) { cout << "Alice\n"; } else { cout << "Bob\n"; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while (t--) { solve(); } return 0; }
验证样例
测试用例 结果 1 5 2 110114 否 5 < 4? 否 Bob 2 7 4 10110115 7 < 8 是 Alice 3 6 1 0100001 是 — 4 11114 否 4 < 2 否 Bob 5 8 3 101101105 8 < 6 否 6 4 1111116 6 < 8 是 Alice 与题目输出一致。
总结
本题的关键在于:
- 若 的数量 ,Alice 直接获胜。
- 若 ,Bob 可以通过保留一个 并翻转不包含它的子串,保持 的数量 ,从而获胜。
- 若 ,Alice 可以每轮净减少 的数量,最终获胜。
- 1
信息
- ID
- 6238
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者