Restricted RPS
原题地址
这道题就是一道模拟题,跟着模拟就行了。
自己条件写的迷糊了,WA了好多次才改正。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
int t;cin >>t;
while(t--){
int n;cin>>n;
int a , b ,c;cin >>a>>b>>c;
char s[10000]; cin >>s;
map<char, int >mp;
mp['P']=0;
mp['R']=0;
mp['S']=0;
for(int i=0;i<n;i++){
mp[s[i]]++;
}
int sum =0;
sum +=min(a,mp['S'])+min(b,mp['R'])+min(c,mp['P']);
if(sum>=(n+1)/2){
cout<<"YEs"<<endl;
for(int i=0;i<n;i++){
if(s[i]=='R'){
if(b>0)cout<<'P',b--;
else {
if(a-mp['S']>0&&a)cout<<'R',a--;
else if(c-mp['P']>0&&c!=0)cout<<'S',c--;
}mp['R']--;
}
else if(s[i]=='P'){
if(c>0)cout<<'S',c--;
else {
if(b-mp['R']>0&&b!=0)cout<<'P',b--;
else if(a-mp['S']>0&&a!=0)cout<<'R',a--;
}mp['P']--;
}
else if(s[i]=='S'){
if(a>0)cout<<'R',a--;
else {
if(c-mp['P']>0&&c!=0)cout<<'S',c--;
else if(b-mp['R']>0&&b!=0)cout<<'P',b--;
}mp['S']--;
}
}
cout<<endl;
}
else cout<<"No"<<endl;
mp.clear();
}
return 0;
}