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;
}
全部评论

相关推荐

10-31 14:54
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务