欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Restricted RPS

程序员文章站 2024-03-17 11:24:46
...

原题地址
这道题就是一道模拟题,跟着模拟就行了。
自己条件写的迷糊了,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;
}