Time Limit: 2 sec / Memory Limit: 1024 MB
配点 : 500 点
ストーリー
駅に着いた僕が見たのは、異形と戦ういろはちゃんだった。まるで舞っているかのように動き回り、敵を翻弄している。
それでも、一向に異形の勢いは衰えない。敵の数が多すぎる。僕も、見てるだけじゃダメだ。君の、力に!
問題文
今、敵が M 体いて、 i 番目の敵は最初はあなたのいるところから x_i+0.5 だけ離れたところにいますが、1 秒ごとに 1 だけあなたに近づきます。敵との距離が 0 になるとあなたは死んでしまいます。厳密には、距離が 0.5 の敵にさらに近づかれたときあなたは死んでしまいます。
また、それぞれの敵は0
と1
からなる固有の文字列を持っており、 i 番目の敵が持っている文字列は s_iです。
あなたはぶきを持っており、ぶきも0
と1
からなる文字列 Sを持っています。 あなたはそのぶきを使って、次の 2 つのことができます。
- 一番自分に近い敵を倒す。ただし、敵の持つ文字列よりぶきの持つ文字列のほうが辞書順で大きくなければならない。
- 1 秒間かけてぶきに魔法をかけ、文字列を変更する。
ただし、攻撃にかかる時間は十分小さく、無視できるものとします。また、どちらの行動においてもあなたは最初にいた場所から移動することはありません。
あなたが使える魔法は、あなたのぶきの持つ文字列を、次のように変更します。
- 文字列の先頭に
0
を 2 つ加える。 - それぞれの文字の下に、右隣と左隣の数字が等しいなら
0
、異なるなら1
を書く。ただし、右隣か左隣のどちらかの文字が存在しない場合は何も書かない。 - 下に書かれた文字列を、新しい文字列とする。
例えば、あなたのぶきが文字列1101
を持っているときに魔法を使用すると、以下のようにして新しい文字列は1110
となります。
M 体の敵の情報と、あなたのぶきが最初に持つ文字列 S が与えられるので、あなたが無事に生き残ることができるか判定してください。
制約
- 0 \leq M \leq 10^5
- 0 < x_1 \leq x_2 \leq \dots \leq x_M \leq 10^{18}
- 1 \leq |s_i| (i=1,2,\dots,M)
- \displaystyle\sum_{i=1}^M |s_i| \leq 10^5
- 1 \leq |S| \leq 10^5
- s_i および S はすべて
0
または1
からなる文字列
入力
入力は以下の形式で標準入力から与えられます。
S M x_1 s_1 x_2 s_2 : x_M s_M
出力
すべての敵を、距離が 0 になる前に倒すことができるなら Yes
、できないなら No
と出力してください。
入力例 1
1101 2 1 1001 2 1101
出力例 1
Yes
以下のようにして、すべての敵を倒すことができます。
- 一番近い敵を倒す。
- 1 秒かけてぶきに魔法をかける。ぶきの持つ文字列は
1110
となる。敵が 1 近づく。 - 一番近い敵を倒す。
入力例 2
1101 2 1 1001 2 1110
出力例 2
No
敵を倒すとき、ぶきの持つ文字列の方が辞書順で大きくなければなりません。
入力例 3
1111 4 1 1 2 011 3 1100 7 0000001
出力例 3
Yes
1 度も魔法を使わなくても全ての敵を倒せることもあります。
入力例 4
00000000 1 1000000000000000000 1
出力例 4
No
何度魔法を使っても倒せない敵がいることもあります。
入力例 5
0110011000 10 1 100 2 0111 3 0000 5 1 5 0 6 0000001 7 11 7 00 8 00 9 0101
出力例 5
No