码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-11-05 13:21:51      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:however   and   play   --   force   tin   The   ORC   main   

链接:

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;
}

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

标签:however   and   play   --   force   tin   The   ORC   main   

原文地址:https://www.cnblogs.com/YDDDD/p/11797726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!