Educational Codeforces Round 90 (Rated for Div. 2) B. 01 Game
Posted kanoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 90 (Rated for Div. 2) B. 01 Game相关的知识,希望对你有一定的参考价值。
题目链接:https://codeforces.com/contest/1373/problem/B
题意
给出一个二进制串 $s$,Alica 和 Bob 每次可以选择移去 $s$ 中的一个 $10$ 或 $01$,无法选择者视为输掉游戏,判断最终谁会胜利。($1 le t le 1000, 1 le |s| le 100$)
题解一
$s$ 范围较小,$O_{(n^2)}$ 模拟。
代码
#include <bits/stdc++.h> using namespace std; void solve() { string s; cin >> s; int cnt = 0; while (1) { bool flag = false; for (int i = 0; i + 1 < s.size(); i++) { if (s[i] != s[i + 1]) { s = s.substr(0, i) + s.substr(i + 2); ++cnt; flag = true; } } if (!flag) break; } cout << (cnt & 1 ? "DA" : "NET") << " "; } int main() { int t; cin >> t; while (t--) solve(); }
题解二
在移除所有相邻的不同字符后,字符串最终为连续的 $0$ 或 $1$,即移除了 $0$ 和 $1$ 中的较少者,其个数代表着游戏总共可以进行多少步。
代码
#include <bits/stdc++.h> using namespace std; void solve() { string s; cin >> s; int cnt[2] = {}; for (char c : s) ++cnt[c - ‘0‘]; int mi = min(cnt[0], cnt[1]); cout << (mi & 1 ? "DA" : "NET") << " "; } int main() { int t; cin >> t; while (t--) solve(); }
以上是关于Educational Codeforces Round 90 (Rated for Div. 2) B. 01 Game的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 7 A
Educational Codeforces Round 7
Educational Codeforces Round 90
Educational Codeforces Round 33