裁判官オンライン:合宿前に牛オフネットワークNOIP2018 -グループを改善(セッション8)T1
ラベル:問題を考え、シミュレーション
PS:このタイトルは以下のトピックでは、適応を説明するので、被写体がまだ同じである、によるオフラインシミュレーションゲームに変更されました。
タイトル説明
我々はすべて知っているように、シェルドンは地域の人々の強い感覚です。
レナードとシェルドンは最近、一緒に新しいソファを買って、このソファは、クッションNNの合計の上に、非常に長いもののみNNの場所を意味し、それぞれの場所には、一人だけを行うことができます。シェルドンで慎重に選択した後、彼はこの位置レナードを占め、長期的に提出する位置を見つけました。
最後に、レナードシェルドンはもはやソファ席の不当な要求を容認することはできません、とシェルドンはソファーの座席のために戦います!!
レナードは、いくつかの連続した位置を選択します(0であってもよい)、それらを占領します。シェルドンは確かシェルドン位置など、いくつかの連続した選択のように、彼、ダウンバック(0であってもよい)、それらを占有しません。そして、レナードは幸せではないので、彼はいくつかの位置を占めていました。シェルドンと動揺。。。。。。
あまりにも興奮したので、彼がかつて占有どのような位置を忘れているので最後に、両方の疲れ、ちょうど彼の最後の位置(当時占有怒っシェルドン・レナードによって占有される位置、および任意の時間Aを占有覚え位置のみ)で最も一人で占有することができます。偶然にも、すべての最終的な位置が占有されています。レナードとシェルドンの真ん中のでトイレに行くことができるので、2つを交互に位置を占めていないが、一部の人は二度位置を占めることができます。
彼の記憶のためにペニー疑問を占めていたペニーは、二人の時間的順序を覚えて沈黙の側にあった、それは何が自分の権利のために書かれているかどうかを判断するために、古いXを得ました。簡単に言えば、古いXが占領スキームのいくつかの種類が職業はラインでレナードとシェルドンの「領土」で最後になりますがあるかどうかを確認できるようにすることです。
エントリー
最初の行は整数Tが含まれ、Tは、テストポイントの現在のセットの合計データセットを表します。
各グループの最初の行は、によってテストポイントでRとB sが最終グリッドを表す成分色ストリング。Rはシェルドンの領域を表し、Bは、文字列の長さがNである間、レナードの領域を表します。
二行目は、FおよびLの操作番目構成されるストリングT mをFが特定の操作がシェルドンある表し、Lは、文字列の長さがMであるが、レナード演算を表します。
輸出
条件が満たされた場合、または出力の各ラインのテストポイントは、出力番号はい出力します
サンプル
入力
3
R
FL
RRRBR
FFFF
BRRBBRB
LFL
出力
Yes
No
Yes
ヒント
データ満足の100%\(N、m≤100000\)
すべてのデータを満たす\(T≦20 \) 。
問題の解決策
状況はサンプルを参照するには、法を見つけようと、非常に複雑になりますシミュレートするための時間軸であることは、何もかなりない見つかりませんでした。
しかし、私は色が最終的な合計(ナンセンス)のそのセクションを残して、最後でなければならないことがわかりました。我々は、適切な、タイムラインに対してシミュレーション操作を逆にしてみてくださいTianTu色がなりの色を排除し、これらの2つの同等の操作を行い、なぜ、。以下の例を参照してください。
とき逆:最初のt秒で、私たちは、この期間の中間削除Rを:
T-S:\([] [] [] [] BBBRRBBB [] [] [] \)
第1のT 1秒:\([] [] [] [] BBB [] [] BBB [] [] [] \)
正のシーケンスの場合:第1のT 1秒で、我々はいくつかのRにカバーするBに
第1のT 1秒:\([] [] [] [] BBBBBBBB [] [] [] \)
T-S:\([] [] [] [] BBBRRBBB [] [] [] \)
対照的に、T-1秒間、その逆を行うための時間の場合:正の配列を作るために中央の空のセクションは、:中央が接続されています。しかし、実際には違いはありません。逆の操作ので、中央部分は、もはや色で充填することができないので、我々は缶端部Bをするマージ、これは、時間の正のシーケンスの期間に相当します。
練習はうまくプロセスのシミュレーション限り、出てきました。もちろん、シミュレーションが本当に維持するために二重にリンクされたリストのようなものを使用する必要はありません、我々は録音を開始\(CNTB、CNTR \)時の初期を示すためのブロックのL番号、ブロックの数Rを 。次いで、背面から被写体に記載の一連の動作部分を除去します。
最終的な判断である場合には、なお、\(CNTB <= 0 \) && \(CNTR <= 0 \) 、中間操作しないことを選択することができ色付けので≤取ります。
コードは以下の通りであります:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int main(){
int T;scanf("%d",&T);
while(T--){
char a[N],op[N];
scanf("%s",a+1);scanf("%s",op+1);
int len=strlen(a+1),round=strlen(op+1);
int cntr=0,cntb=0;
for(int i=1;i<=len;i++)if(a[i]!=a[i-1]){
if(a[i]=='R')cntr++;
else cntb++;
}
for(int i=round;i>=1;i--){
if(op[i]=='L'){
cntb--;if(cntr>=2)cntr--;
}
else{
cntr--;if(cntb>=2)cntb--;
}
}
if(cntb<=0&&cntr<=0)puts("Yes");
else puts("No");
}
}