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