【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 }