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

Codeforces Educational Codeforces Round 54 题解

Educational Codeforces Round 27