Atcoder Beginner ABC166 F

Posted rex-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Atcoder Beginner ABC166 F相关的知识,希望对你有一定的参考价值。

Atcoder ABC166 F

Three Variables Game

题意

有一个游戏包含三个变量,分别表示为(A),(B)(C)。随着游戏的进行,将会有(N)个事件要求您做出选择。这些选项中的每一个都由一个字符串Si?表示。如果Si(A) || (B),你必须在(A)(B)上加(1),然后从另一个上减去1;如果Si(A)|| (C),你必须在(A)(C)上加1,然后从另一个上减去1;如果Si(B) || (C) ,你必须在(B)(C)上加1,然后从上减去1。每次选择后,(A)(B)(C)都不应为负。确定在这种情况下是否可以做出(N)个选择。如果可能的话,也给一个这样的方式来做选择。

输入

(N) (A) (B) (C)

S1 S2

:

SN

输出

输出如果在这种情况下可以做出(N)个选择,则打印“是”;否则,打印“否”。
另外,在前一种情况下,展示一种这样的方法来在随后的N行中进行选择。第((i)+1)行应该包含变量((A)(B)(C))的名称,您在第(i)-(th)选项中向其添加1。

标准答案

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, a[3];
    cin >> n >> a[0] >> a[1] >> a[2];
    vector<string> q(n);
    for (auto &e : q)
        cin >> e;
    vector<char> result;
    for (int i = 0; i < n; ++i)
    {
        string s = q[i];
        int x = s[0] - ‘A‘;
        int y = s[1] - ‘A‘;
        if (!a[x] && !a[y])
        {
            result.clear();
            break;
        }
        if (a[x] > a[y])
        {
            --a[x];
            ++a[y];
            result.push_back(s[1]);
            continue;
        }
        if (a[x] < a[y])
        {
            ++a[x];
            --a[y];
            result.push_back(s[0]);
            continue;
        }
        if (i + 1 < n && q[i + 1].find(s[0]) != string::npos)
        {
            ++a[x];
            --a[y];
            result.push_back(s[0]);
            continue;
        }
        --a[x];
        ++a[y];
        result.push_back(s[1]);
    }
    if (result.empty())
    {
        cout << "No
";
        return 0;
    }
    cout << "Yes
";
    for (char c : result)
        cout << c << ‘
‘;
}

以上是关于Atcoder Beginner ABC166 F的主要内容,如果未能解决你的问题,请参考以下文章

AtCoder Beginner Contest 166 题解报告

解题报告AtCoder Beginner Contest 166

解题报告AtCoder Beginner Contest 166

AtCoder Beginner Contest 153 F - Silver Fox vs Monster

AtCoder Beginner Contest 184 F - Programming Contest(双向dfs)

AtCoder Beginner Contest 144:E.Gluttony题解