Codeforces Round #597 (Div. 2) B. Restricted RPS
Posted ydddd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}
以上是关于Codeforces Round #597 (Div. 2) B. Restricted RPS的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid
codeforces Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid
Codeforces Round #597 (Div. 2) A. Good ol' Numbers Coloring
Codeforces Round #597 (Div. 2) E. Hyakugoku and Ladders 概率dp