zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    递归
    linq语法
    客户端(winform)更新
    c# 实时监控数据库 SqlDependency
    C# MVC NPOI导出
    mui手机图片压缩上传+C#
    vs连接Oracle 客户端库时引发 BadImageFormatException
    一对多的子表数据利用游标循环更新主表的数据
    数据库的恢复数据语句
    mysql三-2:数据类型
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11797726.html
Copyright © 2011-2022 走看看