贪心,下标i j要分清楚。。。
#include<bits/stdc++.h> using namespace std; #define int long long #define sc(x) scanf("%I64d",&x); #define si signed #define fi first #define se second #define pb push_back #define forn for(int i=0;i<n;i++) char s[105]; int A[3],B[3]; char t[105]; si main() { int T,a,b,c,n; sc(T); while(T--) { sc(n) sc(B[2])sc(B[0])sc(B[1]) scanf("%s",s); A[0]=A[1]=A[2]=0; for(int i=0; i<n; i++) { if(s[i]=='R')A[0]++; else if(s[i]=='P')A[1]++; else if(s[i]=='S')A[2]++; } int ans=0; for(int i=0; i<3; i++) { ans+=min(A[i],B[i]); } // cout<<ans<<' '; if(ans*2<n) { puts("NO"); } else { puts("YES"); memset(t,0,sizeof t); for(int i=0; i<n; i++) { if(s[i]=='R'&&B[0]) { t[i]='P'; B[0]--; // cout<<i<<'i'<<B[0]<<endl; } else if(s[i]=='P'&&B[1]) { t[i]='S'; B[1]--; } else if(s[i]=='S'&&B[2]) { t[i]='R'; B[2]--; } } t[n]='