【CodeForces1245B ---制限付きRPS】



Codeforces 1245b Restricted Rps



【CodeForces1245B ---制限付きRPS】


説明

nを正の整数とします。 a、b、cをa + b + c = nのような非負の整数とします。

アリスとボブはじゃんけんをn回します。アリスはボブがプレーするハンドのシーケンスを知っています。ただし、アリスはロックを1回、紙をb回、はさみをc回再生する必要があります。



アリスは、少なくとも⌈n2⌉(n2は最も近い整数に切り上げられます)の手でボブを倒した場合に勝ちます。それ以外の場合、アリスは負けます。

じゃんけんでは:



  • ロックははさみを打ちます
  • 紙は岩を打つ
  • はさみが紙を打ちます。

タスクは、ボブがプレーする一連のハンドと、数字a、b、cが与えられた場合、アリスが勝つことができるかどうかを決定することです。もしそうなら、アリスが勝つために使用できるハンドの可能なシーケンスを見つけてください。

複数の回答がある場合は、それらのいずれかを印刷してください。

入力



最初の行には、テストケースの数である単一の整数t(1≤t≤100)が含まれています。

次に、t個のテストケースが続きます。各テストケースは3行で構成されています。

  • 最初の行には、単一の整数n(1≤n≤100)が含まれています。
  • 2行目には、a、b、c(0≤a、b、c≤n)の3つの整数が含まれています。 a + b + c = nであることが保証されています。
  • 3行目には、長さnの文字列sが含まれています。 sは、「R」、「P」、および「S」のみで構成されます。 i番目の文字は、i番目のボブがロックを演奏する場合は「R」、紙の場合は「P」、はさみの場合は「S」です。

出力

各テストケースの場合:

  • アリスが勝てない場合は、「NO」(引用符なし)を印刷します。
  • それ以外の場合は、「YES」(引用符なし)を出力します。また、「R」、「P」、「S」のみで構成される長さnの文字列tを印刷します。これは、アリスが勝つために使用できる一連の手です。 tには、正確にa'R、b 'P、およびc'Sが含まれている必要があります。
  • 複数の回答がある場合は、それらのいずれかを印刷してください。

出力の「YES」/「NO」の部分では大文字と小文字が区別されません(つまり、「yEs」、「no」、または「YEs」はすべて有効な回答です)。 「R」、「P」、および「S」では大文字と小文字が区別されることに注意してください。

サンプル入力


3
1 1 1
RPS
3
3 0 0
RPS

サンプル出力

はい
PSR
しない

ACコード:

#include #include #include using namespace std #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) int main() { SIS int a,b,c,T,n string s cin >> T while(T--) { cin >> n >> a >> b >> c >> s for(int i=0i<ni++) { if(s[i]=='R' && b!=0) s[i]='P',b-- else if(s[i]=='P' && c!=0) s[i]='S',c-- else if(s[i]=='S' && a!=0) s[i]='R',a-- else s[i]='#' } if(a+b+c<(n+0.5)/2) { cout << 'YES' << endl for(int i=0i<ni++) { if(s[i]=='#') { if(a) s[i]='R',a-- else if(b) s[i]='P',b-- else s[i]='S',c-- } cout << s[i] } cout << endl } else cout << 'NO' << endl } return 0 }