A - あるよるのできごと

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 300

ストーリー

始まりは、ある夜のことだった。そのころ、僕といろはちゃんはカラフルなブロックを積むゲームにハマっていた。そのゲームは何の変哲もないものだったが、数多くのバグが存在していた。例えば、消えるはずのブロックが消えなかったり、風が吹いてブロックが飛んだり、変な浮島が現れたり。

その夜、僕といろはちゃんはこのゲームでオンライン対戦をしていたが、その対戦結果が変だった。「スコアを計算する部分にもバグがあるんじゃないですか?」いろはちゃんの一言を、僕は本当か確かめることにした。

問題文

このゲームは 4 人プレイにのみ対応しており、各ラウンドで 1 位~ 3 位になると順位に応じた得点が得られる。各ラウンドの対戦結果が引き分けになることは無い。スコア表示画面では各々の得点が加算された履歴を見ることができる。

例えば、あるプレイヤーについて「1 2 2」と表示されている場合、そのプレイヤーはどこかのラウンドで 1 位を取り、それ以降のどこかのラウンドで 2 位を取り、それ以降のどこかのラウンドで 2 位を取り、それ以降のラウンドでは得点を獲得していないことがわかる。

僕といろはちゃんは N ラウンドの対戦を行った。4 人それぞれについて、N ラウンドのスコアデータが入力されるので、そのゲーム結果があり得るかを出力せよ。また、あり得るならば各ラウンドの対戦結果の例を出力せよ。

制約

  • 入力はすべて整数
  • 0 \leq A,B,C,D \leq 100
  • 1 \leq N \leq 100
  • 1 \leq a_i \leq 3 (1 \leq i \leq A)
  • 1 \leq b_i \leq 3 (1 \leq i \leq B)
  • 1 \leq c_i \leq 3 (1 \leq i \leq C)
  • 1 \leq d_i \leq 3 (1 \leq i \leq D)

入力

入力は 5 行からなる。
1 行目にはラウンド数 N 、プレイヤー 1 がスコアを獲得した回数 A 、プレイヤー 2 がスコアを獲得した回数 B 、プレイヤー 3 がスコアを獲得した回数 C 、プレイヤー 4 がスコアを獲得した回数 D が入力される。
2 行目に入力される A 個の整数はプレイヤー 1 がスコアを獲得したラウンドにおける順位を表す。
3 \sim 5 行目にはそれぞれプレイヤー 2 \sim 4 のスコアに関する情報が 2 行目と同様に入力される。
以下を参考にせよ。

N A B C D
a_1 a_2 \cdots a_A
b_1 b_2 \cdots b_B
c_1 c_2 \cdots c_C
d_1 d_2 \cdots d_D

出力

入力を満たす各ラウンドの対戦結果が存在しない場合には、Noと出力せよ。
存在する場合にはYesと出力し、続く N 行に各ラウンドの対戦結果について、4 位を取ったプレイヤーの番号を出力せよ。入力を満たす出力が複数存在する場合には、いずれを出力しても構わない。


入力例 1

1 1 1 1 0
1
3
2

出力例 1

Yes
4

入力例 2

1 0 0 0 0




出力例 2

No

入力例 3

10 8 7 8 7
1 3 1 3 1 3 1 2
3 3 1 2 3 3 3
2 2 2 1 1 2 2 1
1 2 3 2 2 1 3

出力例 3

Yes
4
2
4
3
3
2
1
4
1
2

解説

解説

B - 叫び声

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : \(400\) 点

ストーリー

闇をつんざくような叫び声。僕もいろはちゃんもすぐに外の様子に気がついた。遠くの街のほうが赤く光って、異音を轟かせながら揺れる。「あれって…!」僕が"それ"に気がついたときには、いろはちゃんはもう走り出していた。

問題文

いろはちゃんのいる町には \(M+1\) 個の駅と \(N\) 個の電車があり、それぞれ \(1\) から \(M+1\)、\(1\) から \(N\) の番号が付けられている。

現在の時刻は \(0\) である。今いろはちゃんは駅 \(1\) におり、駅 \(M+1\) に行こうとしている。

電車 \(i\) は時刻 \(A_i\) に駅 \(1\) を出発し、駅 \(j+1\ (1≦j≦M)\) には時刻 \(A_i+B_i\times j\) に着く。

また、いろはちゃんは走ることで駅 \(k\ (1≦k≦M)\) と駅 \(k+1\) の間を \(L\) 単位時間かけて移動できる。

いろはちゃんは駅で移動手段を変えることができ、これにかかる時間は無視できる。駅以外の場所で移動手段を変えることはできない。

いろはちゃんが駅 \(M+1\) に着く最速の時刻を求めよ。

制約

  • 入力はすべて整数
  • \(1≦N≦10^5\)
  • \(1≦M, L≦3\times10^8\)
  • \(0≦A_i≦10^{17}\)
  • \(1≦B_i≦3\times10^8\)

入力

入力は以下の形式で与えられる。

\(N\) \(M\) \(L\)
\(A_1\) \(B_1\)
\(A_2\) \(B_2\)
:
\(A_N\) \(B_N\)

出力

答えを \(1\) 行に出力し、最後に改行せよ。


入力例 1

3 3 4
4 2
2 3
3 4

出力例 1

10

次のように移動すると、駅 \(M+1\ (=4)\) に時刻 \(10\) に着くことができる。

  • 電車 \(2\) の出発を待つ ( 時刻 \(0\) - 時刻 \(2\) )
  • 電車 \(2\) に乗って駅 \(2\) まで行く ( 時刻 \(2\) - 時刻 \(5\) )
  • 電車 \(1\) を待つ ( 時刻 \(5\) - 時刻 \(6\) )
  • 電車 \(1\) に乗って駅 \(4\) まで行く ( 時刻 \(6\) - 時刻 \(10\) )

入力例 2

3 3 3
4 2
2 3
3 4

出力例 2

9

次のように移動すると、駅 \(M+1\ (=4)\) に時刻 \(9\) に着くことができる。

  • 駅 \(4\) まで走る ( 時刻 \(0\) - 時刻 \(9\) )

入力例 3

1 100 10
100 1

出力例 3

200

次のように移動すると、駅 \(M+1\ (=101)\) に時刻 \(200\) に着くことができる。

  • 駅 \(2\) まで走る ( 時刻 \(0\) - 時刻 \(10\) )
  • 駅 \(1\) まで走る ( 時刻 \(10\) - 時刻 \(20\) )
  • 駅 \(4\) まで走る ( 時刻 \(20\) - 時刻 \(50\) )
  • 駅 \(4\) で \(20\) 単位時間留まる ( 時刻 \(50\) - 時刻 \(70\) )
  • 駅 \(1\) まで走る ( 時刻 \(70\) - 時刻 \(100\) )
  • 電車 \(1\) に乗って駅 \(101\) まで行く ( 時刻 \(100\) - 時刻 \(200\) )

入力例 4

3 139128390 220019821
3162336416461334 196423673
2909210940940890 272140126
31923189201903829 68312342

出力例 4

30490445798837804

解説

解説

C - 君の力に

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 500

ストーリー

駅に着いた僕が見たのは、異形と戦ういろはちゃんだった。まるで舞っているかのように動き回り、敵を翻弄している。

それでも、一向に異形の勢いは衰えない。敵の数が多すぎる。僕も、見てるだけじゃダメだ。君の、力に!

問題文

今、敵が M 体いて、 i 番目の敵は最初はあなたのいるところから x_i+0.5 だけ離れたところにいますが、1 秒ごとに 1 だけあなたに近づきます。敵との距離が 0 になるとあなたは死んでしまいます。厳密には、距離が 0.5 の敵にさらに近づかれたときあなたは死んでしまいます。
また、それぞれの敵は01からなる固有の文字列を持っており、 i 番目の敵が持っている文字列は s_iです。

あなたはぶきを持っており、ぶきも01からなる文字列 Sを持っています。 あなたはそのぶきを使って、次の 2 つのことができます。

  • 一番自分に近い敵を倒す。ただし、敵の持つ文字列よりぶきの持つ文字列のほうが辞書順で大きくなければならない。
  • 1 秒間かけてぶきに魔法をかけ、文字列を変更する。

ただし、攻撃にかかる時間は十分小さく、無視できるものとします。また、どちらの行動においてもあなたは最初にいた場所から移動することはありません。

あなたが使える魔法は、あなたのぶきの持つ文字列を、次のように変更します。

  • 文字列の先頭に02 つ加える。
  • それぞれの文字の下に、右隣と左隣の数字が等しいなら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

解説

解説

D - 揺れる街、増える敵

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : \(600\) 点

ストーリー

「いったい、なんだったんでしょうか…」帰り道、いろはちゃんがぽつぽつと話し始める。 「さっきの化け物、明らかにおかしいです」「あんなの、この世界にいていいものじゃありません」「あれはまるで、バグ…」

彼女の言葉を遮るように、轟音が響き渡った。しかも、今度は何回も。僕たちは顔を見合わせ、走り出した。

問題文

\(T\) 個の街で、それぞれ敵が出現した。

\(i\) 番目の街で出現した敵は、一列に並んだマス状の形をしており、元々のマスの個数は \(1\) 個以上 \(L_i\) 個以下である。 街ではすでに敵のマスのうち \(0\) 個以上を破壊し、敵は破壊されたマスで分割されたいくつかの部分に分かれている。マスの個数が \(L\) の敵は、端から \(i\) 番目のマスを破壊されると、マスの個数がそれぞれ \(i-1\) と \(L-i\) の \(2\) つの敵に分割される(ただし、マスの個数が \(0\) の敵は消滅する)。

しかし、その敵は分割されると強くなってしまうものだった。具体的には、マスの個数が \(p_1, p_2, \dots, p_n\) である \(n\) 個の部分に分割されたとき、敵の強さは全体で \(p_1\times p_2\times\dots\times p_n\) になってしまう。

現在、\(i\) 番目の街では敵の強さが \(2^{A_i}\) 以上になってしまったという。敵の元々のマスの個数としてありうるものが何通りあるかを、\(T\) 個の街に現れた敵それぞれについて求めよ。

制約

  • 入力はすべて整数
  • \(1≦T≦300\)
  • \(1≦L_i≦10^9,\ 0≦A_i≦10^9\)

入力

入力は以下の形式で与えられる。

\(T\)
\(L_1\) \(A_1\)
\(L_2\) \(A_2\)
:
\(L_T\) \(A_T\)

出力

\(T\) 行出力し、\(i\ (1≦i≦T)\) 行目には \(i\) 番目の街に出現した敵に対する答えを出力せよ。


入力例

4
9 3
13 4
11 6
11235813 213455

出力例

3
5
0
10702177

\(1\) 番目の街に出現した敵の元々のマスの個数は \(7, 8, 9\) の \(3\) 通りがあり得る。

それぞれ、敵が次のように破壊されたの場合に条件を満たす(oはマスが破壊されていないことを、xは破壊されていることを表す)。

  • 敵の元々のマスの個数が \(7\) : ooxoooo (敵の強さは \(8\))
  • 敵の元々のマスの個数が \(8\) : ooxooxoo (敵の強さは \(8\))
  • 敵の元々のマスの個数が \(9\) : oooxoxooo (敵の強さは \(9\))

\(2\) 番目の街に出現した敵の元々のマスの個数は \(9, 10, 11, 12, 13\) の \(5\) 通りがあり得る。

それぞれ、次のような破壊のされ方の場合に条件を満たす。

  • 敵の元々のマスの個数が \(9\) : ooooxoooo (敵の強さは \(16\))
  • 敵の元々のマスの個数が \(10\) : ooxooxoooo (敵の強さは \(16\))
  • 敵の元々のマスの個数が \(11\) : oooxooooxoo (敵の強さは \(24\))
  • 敵の元々のマスの個数が \(12\) : oooooooooxoo (敵の強さは \(18\))
  • 敵の元々のマスの個数が \(13\) : ooooxoooooooo (敵の強さは \(32\))

\(3\) 番目の街に出現した敵の元々のマスの個数は \(0\) 通りがあり得る。


解説

解説
E - 芽生え

Time Limit: 5 sec / Memory Limit: 1024 MB

配点 : 700

ストーリー

戦いの中、不思議と冴えた頭で思い出すのは昔のこと。

今からすれば他愛のない、単純な石取りゲームで打ち負かされ、泣いていた僕。その目の前に現れた、ヒーローのようなヒロイン。 それが僕にとっての憧れ、そして、彼女の隣にいたいという気持ちの芽生えだ。

問題文

次のようなゲームを考えます。

  • 初期盤面として N 個の机があり、それぞれにりんごが 0 個以上 K 個以下乗っている。
  • あなたから初めて、2 人は交互に次の行動をし、先にできなくなった方が負け。
    • 机を 1 つ選んで、それに乗っているりんごを 1 つ以上食べる。

2 人とも最善を尽くしたときにあなたが勝つような初期盤面は何通りあるでしょうか。答えは非常に大きくなる可能性があるため、 10^9+7 で割った余りを答えてください。

制約

  • 入力はすべて整数
  • 1 \leq N \leq 2000
  • 0 \leq K \leq 10^{18}

入力

入力は以下の形式で標準入力から与えられます。

N K

出力

条件を満たす初期盤面の数を 10^9+7 で割った余りを 1 行に出力してください。


入力例 1

3 2

出力例 1

20

N=3,K=2 のとき、条件を満たす初期盤面は次の 20 通りです。

(0,0,1), (0,0,2), (0,1,0), (0,1,2), (0,2,0), \\(0,2,1), (1,0,0), (1,0,2), (1,1,1), (1,1,2), \\(1,2,0), (1,2,1), (1,2,2), (2,0,0), (2,0,1), \\(2,1,0), (2,1,1), (2,1,2), (2,2,1), (2,2,2)


入力例 2

2 99

出力例 2

9900

入力例 3

3 5

出力例 3

188

N=3, K=5 のとき、条件を満たす初期盤面は 188 通りあります。


入力例 4

7 20

出力例 4

744195543

解説

解説

F - 道なき道を

Time Limit: 9 sec / Memory Limit: 1024 MB

配点 : 800

ストーリー

僕たちは敵の湧いてくる方角へと駆けた。敵を倒しながら獣道を行くと、酷く損傷して、辛うじて汽車のように見えるものがあった。

僕は急に、「行かねば」という焦燥感と、「行っていいのか」という不安との板挟みになった。

でも前へ、 それでも前へ。

問題文

N 両からなる汽車があります。 それぞれの車両には 3 つの部品があり、車両 k が出すことのできる速度はそれぞれの部品 A,B,C の持つパワー A_k,B_k,C_k の和で表されます。

どの部品も、0 以上 F 以下のパワーを持ちます。

汽車の各車両の出すことのできる速度が降順になっていないと、進む途中で汽車が崩壊してしまいます。

あなたといろはちゃんはなるべく少ない部品を改造して、汽車が崩壊しないようにしたいと思っています。改造しても、0 以上 F 以下のパワーを持った部品しか作ることはできません。
すべての i<j に対して、(車両 i が出すことのできる速度) \geq (車両 j が出すことのできる速度) となるように、改造する部品の個数の最小値を求めてください。

制約

  • 入力はすべて整数
  • 1 \leq N \leq 2\times10^5
  • 1 \leq F \leq 10^{10}
  • 0 \leq A_k, B_k, C_k \leq F

    (制約の上限が間違っていたため修正しました 修正日時 : 2019/05/03 19:06)

部分点

  • N \leq 3000 を満たすテストケースすべてに正解した場合、300 点が与えられる。

入力

入力は以下の形式で標準入力から与えられます。

N F
A_1 B_1 C_1
A_2 B_2 C_2
 :
A_N B_N C_N

出力

改造する部品の個数の最小値を出力してください。


入力例 1

3 100
80 100 60
30 50 70
90 10 80

出力例 1

1

例えば、車両 2 の部品 B のパワーを 85 に変えると、各車両の合計が 240, 185, 180 になり汽車が連結のまま進めるようになります。


入力例 2

4 100
30 10 40
10 50 90
20 60 50
30 50 80

出力例 2

2

例えば、車両 1 の部品 B のパワーを 90 にして、車両 4 の部品 C のパワーを 10 に変えると、各車両の合計が 170, 150, 130, 90 になり汽車が連結のまま進めるようになります。


入力例 3

4 100
0 0 0
0 0 100
100 100 0
100 100 100

出力例 3

4

全車両の出すことができる速度を同じにするのが最適な場合もあります。


入力例 4

10 100
100 37 49
100 37 49
100 37 49
100 37 49
100 37 49
100 37 49
100 37 49
100 37 49
100 37 49
100 37 49

出力例 4

0

入力例 5

5 10000000000
1701355307 429870732 6220675835
286943432 6531822025 3789827719
2265045229 9897189805 5070400071
8975758188 6810134144 5515765460
7476103030 3953670242 7426723712

出力例 5

4

解説

解説

G - 真実の魔法陣

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 900

ストーリー

「これは…?」そこに着いた僕たちが見たものは、魔法陣のようなものだった。かすれて、ところどころ欠けていて、不完全なのは誰の目にも明らかだった。
今までの僕なら、これを直さずにここで帰っていたかもしれない。でも今は───"真実"が、知りたい。

問題文

あなたの目の前には、巨大な円が描かれています。あなたはこの円を使って、魔法陣を完成させる必要があります。
魔法陣とは、 2N 個の点が円周上に等間隔に並び、N 個のペアに分けて線分を引いたかたちをしているものです。
円周上には 2N 個の点が等間隔に並んでおり、ある点を基準にして時計回りに 1 から 2N までの番号が付けられています。
目の前の 2N 個の点のうち、いくつかの点はすでにペアが決まっており線分で結ばれていますが、いくつかの点はペアが決まっていません。あなたはそれらのペアの組み方を決めて、魔法陣を完成させる必要があります。

魔法陣の複雑さを「円の中で交差している線分のペアの個数」として定めたとき、 あなたは出来上がる魔法陣の複雑さを出来るだけ小さくしたいです。
魔法陣の複雑さが最小になるようなペアの作り方が何通りあるか求め、10^9+7 で割った余りを求めてください。

制約

  • 入力はすべて整数
  • 1 \leq N \leq 300
  • 0 \leq K \leq N
  • 1 \leq a_i,b_i\leq 2N (i=1,2,\dots,K)
  • a_1,a_2,..,a_K,b_1,b_2,..,b_Kはすべて異なる

入力

一行目に、魔法陣のサイズN と、既に組まれているペアの個数 K が与えられます。
続くK 行に、既に組まれているペアが与えられます。

N  K
a_1 b_1
:
a_K b_K

出力

答えを出力してください。


入力例 1

3 0

出力例 1

5

魔法陣の複雑さの最小値は0です。
線分がひとつも交差しないようなペアの組み方は5通りあります。

入力例 2

7 3
1 13
3 11
9 4

出力例 2

4

複雑さの最小値は2です。 複雑さ2を達成するペアの組み方は以下の4通りです。
(2,10),(5,6),(7,8),(12,14)
(2,10),(5,8),(6,7),(12,14)
(2,14),(5,6),(7,8),(10,12)
(2,14),(5,8),(6,7),(10,12)

入力例 3

30 15
44 36
1 11
53 21
38 52
8 22
26 42
35 2
23 37
30 58
18 17
3 33
51 9
39 14
12 41
4 49

出力例 3

1136

解説

解説

H - 永遠に

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : \(1000\) 点

ストーリー

ここは、世界の裏側。そこに、小さなバグが生まれていた。

世界の基盤にあった、不安定な均衡。それが崩れ、生まれたバグは異形となり表の世界へと溢れ出していた。

世界の基盤を組み替え、永遠の安定を実現できたら。きっと、これ以上異形が生まれることはなくなるはずだ。

問題文

正の整数 N が与えられるので、次の条件を満たす N \times N のマス目を 1 つ構築してください。

  • 全てのマスに正整数が 1 つずつ記入されている
  • 1 以上 N^2 以下のどの整数もいずれか 1 つのマスに記入されている

かつ、ij 列に記入されている数を A_{i,j} とすると、

  • i 行(1 \leq i \leq N)において
    • どの (p,q,r) の組 (1\leq p<q<r\leq N)についても、A_{i,p},A_{i,q},A_{i,r} がこの順に等差数列にならない
  • i 列(1 \leq i \leq N)において
    • どの (p,q,r) の組 (1\leq p<q<r\leq N)についても、A_{p,i},A_{q,i},A_{r,i} がこの順に等差数列にならない

制約

  • 入力はすべて整数
  • 3 \le N \le 300


入力

N
N1 行に与えられる。

出力

以下の形式で出力してください。

A_{1,1}\  A_{1,2}\ ... \ A_{1,N}
A_{2,1}\  A_{2,2}\ ... \ A_{2,N}
:
A_{N,1}\ A_{N,2}\ ...\  A_{N,N}

N 行にわたって出力してください。 i 行目には A_{i,1},A_{i,2},...,A_{i,N} をこの順に空白区切りで出力し、最後に改行してください。

サンプル

Sample1,2内では N=3であるとします。

Sample1

1 3 2
4 6 5
7 9 8

A_{1,1},A_{2,1},A_{3,1} で条件を満たしません。

Sample2

4 6 2
1 9 7
3 5 8

このマス目は条件を満たします。


Sample3内では N=4であるとします。

Sample3

16 2 4 8
1 9 15 12
7 5 14 10
6 3 11 13

このマス目は条件を満たします。


解説

解説

I - ピンチ

Time Limit: 3 sec / Memory Limit: 1024 MB

配点 : 1100

ストーリー

(ちょっと、想定外です…)せんぱいが魔法陣で移動した直後、わたしは背後から来た異形に囚われてしまった。

(せんぱいに心配をかけるわけにはいかない、けど…)拘束は厳しく、取り付けられた爆弾のようなものも集中を妨げる。

(せめて、せんぱいだけは…)思考が停滞していく。そこに、聞き慣れた声が飛び込んできた。

「いろはちゃん!…助けに、来たよ!」

問題文

爆弾は N 個の端子を持つ。任意の 2 端子間にはコードがちょうど 1 本存在し、特定の方向にのみ電流が流れる(つまり、爆弾は完全グラフの各辺に適当に向きをつけたものである)。この方向は入力で与えられない。 各コードにはスイッチがあり、オン・オフを切り替えられるが、はじめはすべてオフになっている。爆弾は次のように解体しなければならない。

  • 無力化する端子の個数 K を指定する。
  • その後、K 個の相異なる端子の番号 A_1, A_2, \cdots , A_K を指定し、順番に無力化する。
  • ただし、全ての 1 \leq i < K について、A_i, A_{i+1} 間のコードが電流を流す方向は A_i \rightarrow A_{i+1} である。

あなたの仕事は、次の 2 種類のクエリを何回か呼んだ後、解体手順 K, {A_i} を出力することである。

  • 「トグル」: 2 つの端子 U_i, V_i を指定し、その間のコードのオン・オフを切り替える。ただし、オンになっているコードが 2N 本を超えた場合、即座に爆弾が爆発する。
  • 「検定」: 2 つの端子 U_i, V_i を指定する。端子 U_i から現在オンになっているコードのみを経由して端子 V_i に電流が流れる場合 Y、流れない場合 N と判定される。

ただし、次のいずれかの条件を満たすと、爆弾は爆発してしまい、不正解となる。

  • クエリや解答が invalid である。
  • 「トグル」クエリを、666666 回を超えて呼び出す。
  • 「検定」クエリを、10000 回を超えて呼び出す。
  • オンになっているコードが 2N 本を超える。
  • 出力より多くの端子を無力化できる解が存在する。

制約

  • 2 \leq N \leq 800

入出力

最初に、標準入力から N が以下のように与えられる:

N

次に、「トグル」および「検定」クエリを 0 回以上行う。各クエリは、標準出力に以下の形式で出力しなければならない。

「トグル」クエリ:

1 U_i V_i

ただし、1 \leq U_i, V_i \leq N, U_i \neq V_i でなければならない。この直後には、標準入力には何も与えられない。

「検定」クエリ:

2 U_i V_i

ただし、1 \leq U_i, V_i \leq N, U_i \neq V_i でなければならない。この直後に、質問の答えが標準入力から以下の形式で与えられる:

ans

ここで、ansY または N である。

最後に、解答を出力する。これらは以下の形式で出力しなければならない:

0 K 0
A_1
A_2
\vdots
A_K

その後、直ちにプログラムを終了すること。


ジャッジ

  • 出力のあと、標準出力を flush しなければならない。 そうでないときは TLE の恐れがある。
  • 解答を出力したあと、プログラムはすぐに終了しなければならない。そうでない場合の挙動は未定義である。
  • 出力が誤っていたときの挙動は未定義である。

サンプル

このサンプルでは N = 3 で、電流の向きは 1 \rightarrow 2, 2 \rightarrow 3, 3 \rightarrow 1 である。また、出力された解答は K = 3, {A_i} = 3 \rightarrow 1 \rightarrow 2 である。

入力 出力
3
1 2 3
1 1 3
2 3 1
Y
2 2 1
Y
2 3 2
N
1 1 2
2 3 2
Y
0 3 0
3
1
2

解説

解説

J - もう、諦めない

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 1200

ストーリー

いろはちゃんを捕まえていた、ひときわ巨大な異形。僕は、そいつと一対一で向かい合う。

「同胞を屠ってきたのは貴様らか。できることなら我が直々に手を下してしまいたいものだが、これ以上手駒を失うのは痛い。」 「そこで一つ、貴様と我でゲームをしようではないか。」

問題文

あなたと怪物で次のゲームをします。

  • はじめ、いくつかの長方形がある。どの長方形の縦あるいは横の長さも整数である。
  • あなたから交互に長方形を1つ選んで、自分が切ることのできる方向で等分する。このとき、切ってできる長方形の縦あるいは横の長さも整数でなければならない。数式で表現すると、大きさが h_i \times w_i の長方形があるとき、 n | h_i なる整数 n(>1) について、大きさが h_i / n \times w_i の長方形を n 枚つくるか、 n | w_i なる整数 n(>1) について、大きさが h_i \times w_i / n の長方形を n 枚つくる。

先に行動ができなくなった方が負けです。

切ることができる方向について、あなたはすべての長方形について横方向に切ることができ、いくつかの長方形について縦にも切ることができます。
対して、相手はすべての長方形について縦方向に切ることができ、いくつかの長方形について横にも切ることができます。

それぞれの長方形および切ることができる向きは、あわせて 4 つの数字 a,b,h,w\ (a,b\in\{0,1\},h,w は正の整数) で表されます。 長方形は縦の長さが h で、横の長さが w です。
a = 1 のとき、かつそのときに限りあなたはこの長方形を縦にも切ることができます。
b = 1 のとき、かつそのときに限り相手はこの長方形を横にも切ることができます。

N 個の長方形と切る向きの情報が与えられるので、次の Q 個の質問に答えてください。

  • i 番目の質問では、 1 \leq l_i \leq r_i \leq N なる整数 l_i, r_i が与えられる。 l_i 番目の長方形から r_i 番目の長方形までを使ってゲームをするとき、どちらが勝つか判定してください。

制約

  • 1 \leq N \leq 10^5
  • 0 < h_i \leq 10^5, 0 < w_i \leq 10^5 (i=1,2,\dots,N)
  • a_i,b_i \in \{0,1\} (i=1,2,\dots,N)
  • 1 \leq Q \leq 10^5
  • 1 \leq l_i \leq r_i \leq N (i=1,2,\dots,Q)

部分点

この問題には部分点が設定されている。

  • どちらのプレイヤーも縦横どちらにも切ることができるような入力に正解すると、400 点が得られる。

入力

入力は以下の形式で標準入力から与えられます。

N
a_1 b_1 h_1 w_1
:
a_N b_N h_N w_N
Q
l_1 r_1
:
l_Q r_Q

出力

Q 個それぞれの質問について、あなたが勝つなら Yes 、相手が勝つなら NoQ 行にわたって出力してください。


入力例 1

1
1 1 3 4
1
1 1

出力例 1

Yes

例えばはじめに長方形を縦に 2 等分すると、相手と対称な手を打つことで勝つことができます。 このケースは部分点に含まれます。


入力例 2

2
1 0 2 5
0 1 5 2
1
1 2

出力例 2

No

相手にものまね戦略を取られてしまうと負けてしまいます。 このケースは部分点に含まれません。


入力例 3

13
1 1 3 1
1 1 4 1
1 1 5 9
1 1 2 6
1 1 5 3
1 1 5 8
1 1 9 7
1 1 9 3
1 1 2 3
1 1 8 4
1 1 6 2
1 1 6 4
1 1 3 3
10
3 13
1 6
1 5
9 10
6 11
1 12
3 9
2 4
4 11
1 3

出力例 3

No
Yes
Yes
Yes
Yes
No
Yes
No
Yes
Yes

このケースは部分点に含まれます。


入力例 4

20
0 1 121 219
1 0 300 241
1 1 215 112
0 1 268 156
0 1 33 204
1 0 202 111
1 1 59 70
1 1 272 83
0 0 190 285
1 1 291 283
1 1 299 90
1 1 80 48
0 1 107 291
0 1 158 136
1 1 127 223
1 1 227 93
1 1 79 183
1 0 92 26
1 0 190 300
0 1 294 38
30
14 20
14 19
11 19
11 15
4 8
9 10
5 12
1 7
18 19
12 14
13 15
6 19
6 10
2 5
9 18
9 13
18 19
17 18
4 13
16 18
2 13
13 13
7 12
1 8
2 20
4 12
7 7
10 17
14 18
5 12

出力例 4

Yes
Yes
Yes
No
No
Yes
Yes
Yes
Yes
No
No
Yes
Yes
Yes
No
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
Yes
No
Yes
No
No
Yes

このケースは部分点に含まれません。


解説

解説

K - 世界線

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 1300

ストーリー

今度こそ、僕たちは敵を倒した。帰る途中、僕はあることを思い出していた。

世界の裏側には、この世界の基盤の以外にも基盤があった。それらは完全に壊れていて、すでに滅びてしまったのかもしれない。もしかしたら、その世界でも今回のようなことがあって、新しい基盤と世界が作られていったのかもしれない、だとしたら───僕たちはその連鎖を食い止めたんだ。

そんなことを考えていると、後ろからいろはちゃんの声がした。
「せーんぱい!」

問題文

N つの世界が左右一列に並んでいます。
それぞれの世界は「自然さ」という固有の値を持っており、左からp_1,p_2,..,p_Nの順番に、1 から N を並べ替えた数列をなしています。
この数列は、N のみを要素とする長さ 1 の列をはじめとして、「項をひとつ選んで、その右隣にそれより小さな値を挿入する」という操作の繰り返しによって生まれたことがわかっています。
与えられる数列の生まれる方法が何通り考えられるか求め、10^9+7 で割った余りを求めてください。
ただし二つの”数列の生まれる方法”が異なるとは、ある 1 以上 N-1 以下の整数 k が存在して、k 回目の操作で選択した項と挿入した値の少なくともどちらか一方が異なることを意味します。

制約

  • 入力はすべて整数
  • 1 \leq N \leq 2\times 10^5
  • p_1 = N
  • p_1,p_2,...,p_N\{1,...,N\} の順列

入力

入力は以下の形式で標準入力から与えられる。

N
p_1 p_2 ... p_N

出力

答えを出力してください。


入力例 1

4
4 2 3 1

出力例 1

3

この順列を生み出す操作の方法は以下に示した列の変化を実現する3通りです。
{4}→{4,3}→{4,2,3}→{4,2,3,1}
{4}→{4,3}→{4,3,1}→{4,2,3,1}
{4}→{4,1}→{4,3,1}→{4,2,3,1}

入力例 2

4
4 3 2 1

出力例 2

6

入力例 3

7
7 6 3 4 1 2 5

出力例 3

36

入力例 4

30
30 4 26 15 21 19 14 8 12 7 16 20 2 5 25 13 3 23 18 29 10 27 1 28 9 6 11 24 22 17

出力例 4

321470237

解説

解説

L - ...好きです

Time Limit: 2.5 sec / Memory Limit: 1024 MB

配点 : 1400

ストーリー

「...好きです」

いろはちゃんから帰り道にもらった、一通の封筒。かわいらしいハートのシールで封がしてある。 中にはこんな問題が入っていた。
「いろはちゃん、やっぱ君が本当のラスボスだな...」

問題文

※ひらきちとはこのコンテストを主催した人の名前である。また、ひらきちくんはいろはちゃんではない。

いろは界では、いろはちゃんが数直線上に数十万個のコインを置いたり消したりするのは、有名な話です。

最初、数直線上には一つもコインがありません。
いろはちゃんは、Q 回の操作を順に行います。操作は以下の 3 種類があります。

  • 追加の術:数直線上の座標 xv 円のコインを置く。ただし、座標 x にはこの時点でコインが一個も置かれていないことが保証されている。
  • 消去の術:数直線上の座標 x にあるコインを消す。ただし、座標 x にはこの時点でコインが置かれていることが保証されている。
  • 命令の術:ひらきちくんを座標 x に置き、コインを一個取らせる。この時ひらきちくんは、「効率」が最大となるようなコインを必ず取る。なお、座標 c にある w 円のコインを取る時の「効率」は \frac{w}{|c-x|} である。そこでは、|t|t の絶対値である。

例えば、座標 23 円 のコイン、座標 58 のコインがある場合、各場合における効率の最大値は以下のようになります。

  • ひらきちくんが座標 0 に置く場合、ひらきちくんは「効率」が最大となる座標 5 にあるコインを取り、「効率」の値は 1.6
  • ひらきちくんが座標 1 に置く場合、ひらきちくんは「効率」が最大となる座標 2 にあるコインを取り、「効率」の値は 3.0
  • ひらきちくんが座標 7 に置く場合、ひらきちくんは「効率」が最大となる座標 5 にあるコインを取り、「効率」の値は 4.0

ただし、命令の術で取られたコインはいろはちゃんの手腕によってすぐ元の場所に戻されるため、同じコインを二度以上ひらきちくんが取ることは有り得るということに注意してください。

各命令の術について、ひらきちくんの動きにおける「効率」の値を順に求めてください。
ただし、命令の術において、その時点で数直線上にコインが存在しない場合は「効率」の値が 0 となります。

制約

  • 入力はすべて整数
  • 1\leq Q\leq3 \times 10^5
  • 0\leq x\leq10^9
  • 0\leq v\leq10^9
  • 全ての追加の術において、コインを追加する座標にはその時点でコインが置かれていない
  • 全ての消去の術において、コインを消去する座標にはその時点でコインが置かれている
  • 全ての命令の術において、ひらきちくんのいる座標にその時点でコインが置かれていない

部分点

この問題では、部分点が以下のように存在します。

  • Q \leq 120000 を満たすテストケース全てに正解すると、1100 点が与えられる。
  • 全てのテストケースに正解すると、さらに 300 点が与えられる。

入力

入力は以下の形式で標準入力から Q + 1 行に渡って与えられます。

Q
(1 個目の操作の情報)
(2 個目の操作の情報)
(3 個目の操作の情報)
...
(Q 個目の操作の情報)

追加の術の場合、その行には以下のように入力が与えられます。

1 x v

消去の術の場合、その行には以下のように入力が与えられます。

2 x

命令の術の場合、その行には以下のように入力が与えられます。

3 x

出力

全ての命令の術について、ひらきちくんの最適な動きにおける「効率」の最大値を 順に 出力してください。
絶対誤差または相対誤差は 10^{-5} まで許容されます.


入力例 1

11
1 2 3
3 10
1 5 8
3 0
3 1
3 7
2 2
1 7 9
3 3
3 6
3 10

出力例 1

0.375000000000
1.600000000000
3.000000000000
4.000000000000
4.000000000000
9.000000000000
3.000000000000

入力例 2

10
1 0 10
3 1
3 2
3 3
3 4
3 5
3 6
3 7
3 8
3 9

出力例 2

10.000000000000
5.000000000000
3.333333333333
2.500000000000
2.000000000000
1.666666666667
1.428571428571
1.250000000000
1.111111111111

解説

解説