• Codeforces Round #597 (Div. 2) B. Restricted RPS


    链接:

    https://codeforces.com/contest/1245/problem/B

    题意:

    Let n be a positive integer. Let a,b,c be nonnegative integers such that a+b+c=n.

    Alice and Bob are gonna play rock-paper-scissors n times. Alice knows the sequences of hands that Bob will play. However, Alice has to play rock a times, paper b times, and scissors c times.

    Alice wins if she beats Bob in at least ⌈n2⌉ (n2 rounded up to the nearest integer) hands, otherwise Alice loses.

    Note that in rock-paper-scissors:

    rock beats scissors;
    paper beats rock;
    scissors beat paper.
    The task is, given the sequence of hands that Bob will play, and the numbers a,b,c, determine whether or not Alice can win. And if so, find any possible sequence of hands that Alice can use to win.

    If there are multiple answers, print any of them.

    思路:

    贪心算一下。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
     
    int n;
    char res[110];
    string s;
     
    int main()
    {
        ios::sync_with_stdio(false);
        int t;
        cin >> t;
        while(t--)
        {
            int a, b, c;
            cin >> n;
            cin >> a >> b >> c;
            cin >> s;
            int sum = 0;
            for (int i = 0;i < n;i++)
            {
                if (s[i] == 'R' && b > 0)
                    res[i] = 'P', b--;
                else if (s[i] == 'P' && c > 0)
                    res[i] = 'S', c--;
                else if (s[i] == 'S' && a > 0)
                    res[i] = 'R', a--;
                else
                    res[i] = 'N', sum++;
            }
            if (sum > n/2)
            {
                cout << "NO" << endl;
                continue;
            }
            cout << "YES" << endl;
            for (int i = 0;i < n;i++)
            {
                if (res[i] == 'N')
                {
                    if (a > 0)
                    {
                        cout << 'R';
                        a--;
                    }
                    else if (b > 0)
                    {
                        cout << 'P';
                        b--;
                    }
                    else if (c > 0)
                    {
                        cout << 'S';
                        c--;
                    }
                }
                else
                    cout << res[i];
            }
            cout << endl;
     
        }
     
        return 0;
    }
    
  • 相关阅读:
    华为机试题 二叉查搜索树 判断两序列是否为同一二叉搜索树序列
    华为机试题 火车进站
    Linux命令学习 rmdir
    Linux命令学习 rm
    Linux命令学习 mkdir
    Linux命令学习 du
    Linux命令学习 pwd
    Linux命令学习 ls
    Linux命令学习 cd
    伪代码编程过程
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11797726.html
Copyright © 2020-2023  润新知