A - A 問題

Time Limit: 2 sec / Memory Limit: 256 MB

この問題は、暫定ランキングではペナルティ表示がありますが、最終ランキングではペナルティはありません。
提出回数・提出時間は最終ランキングに影響しないため、コンテスト終了時間ギリギリまで何度でも提出してください。

問題文

B 問題の入力と出力を 1 つ作ってください。
詳しくは B 問題をお読みください。


入力

この問題では入力は与えられない。

出力

この問題に使用できる言語は Text (cat) のみである。

B 問題の制約を満たす入力 V, E, K, a_i, b_i と、その入力に対して正答となる出力 c_i を以下の形式で出力せよ。

以下の制約を満たすB問題の入力 V, E, K, a_i, b_i と、その入力に対して正答となる出力 c_i を以下の形式で出力せよ。

V ( 1 \leq V \leq 100 ), E ( 0 \leq E \leq 4950 ), K ( 1 \leq K \leq V )
※これは本戦参加者用のB問題の制約です。

V E K
a_1 b_1
a_2 b_2
:
a_E b_E
c_1
c_2
:
c_K

配点

この問題の得点は、コンテスト開催時間終了後に以下の操作が行われて確定する。
コンテスト開催時間中に Text (cat) において AC となったあなたの A 問題の提出のうち、最後の提出を、あなたの A 問題の本提出とする。
コンテスト開催時間中に AC となった他の本戦参加者の B 問題の提出のうち、各参加者の最後の提出を、その参加者の B 問題の本提出とする。
A 問題の本提出を行うと、10 点が与えられる。
コンテスト開催時間終了後、あなたの A 問題の本提出の入力部分が、他の各本戦参加者の B 問題の本提出に入力として与えられる。
他の本戦参加者 n 人の B 問題の本提出があなたの A 問題の本提出の入力部分に対して誤答し、
他の本戦参加者 m 人の B 問題の本提出がなかった場合、あなたに上記とは別に 2(n+m) 点が与えられる。

この問題には部分点は設定されていない。正解した場合は、10 点が与えられる。

B - B 問題

Time Limit: 2 sec / Memory Limit: 256 MB

この問題は、暫定ランキングではペナルティ表示がありますが、最終ランキングではペナルティはありません。
提出回数・提出時間は最終ランキングに影響しないため、コンテスト終了時間ギリギリまで何度でも提出してください。

問題文

自己辺や多重辺を含まない無向グラフが与えられます。
このグラフから K 個の頂点を互いに隣接しないように選び、それを出力してください。


入力

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

V E K
a_1 b_1
a_2 b_2
:
a_E b_E
  • 1 行目には与えられるグラフの頂点の数 V ( 1 \leq V \leq 100 ) と辺の数 E ( 0 \leq E \leq 4950 ) と K ( 1 \leq K \leq V ) が空白区切りで与えられる。
  • 1 行目には与えられるグラフの頂点の数 V ( 1 \leq V \leq 20 ) と辺の数 E ( 0 \leq E \leq 190 ) と K ( 1 \leq K \leq V ) が空白区切りで与えられる。
  • 続く E 行には i 番目の辺がつなぐ頂点の番号 a_ib_i ( 0 \leq{} a_i,\ b_i \leq{} V-1 ) が空白区切りで与えられる。
  • 与えられるグラフは自己辺や多重辺を含まない。
  • 条件を満たす頂点の選び方が存在することは保証される。
  • V \leq 20, E \leq 190 の入力に対して正答すると AC となる。

出力

選んだ K 個の頂点の、頂点の番号を K 行に出力せよ。

配点

この問題の得点は、コンテスト開催時間終了後に以下の操作が行われて確定する。
コンテスト開催時間中に Text (cat) において AC となった他の本戦参加者の A 問題の提出のうち、各参加者の最後の提出を、その参加者の A 問題の本提出とする。
コンテスト開催時間中に AC となったあなたの B 問題の提出のうち、最後の提出を、あなたの B 問題の本提出とする。
B 問題の本提出を行うと、10 点が与えられる。
コンテスト開催時間終了後、他の参加者の A 問題の本提出の入力部分が、あなたの B 問題の本提出に入力として与えられる。
他の本戦参加者 n 人の A 問題の本提出の入力部分に対して、あなたの B 問題の本提出が正答し、
他の本戦参加者 m 人の A 問題の本提出がなかった場合、あなたに上記とは別に 2(n+m) 点が与えられる。

この問題には部分点は設定されていない。正解した場合は、10 点が与えられる。


入力例1

3 2 2
0 1
1 2

出力例1

2
0

入力例2

5 3 4
0 1
0 2
0 3

出力例2

2
1
3
4

与えられるグラフが連結であるとは限りません。


入力例3

4 3 2
0 1
1 2
2 3

出力例3

0
2

\{0,\ 2\}\{1,\ 3\} は両方条件を満たします。この場合どちらを出力しても正解です。

C - 天下一不正

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

サワくんは天下一プログラマーコンテスト 1998 の本戦後に行われる懇親会の余興のためにあみだくじを作りました。

しかし、オカモトくんはそのあみだくじをこっそり改竄かいざんし、結果全体を操作することにしました。

オカモトくんは望む結果を得るために、あみだくじに好きなだけ横線を足すことが出来ます。

しかし、改竄かいざんに長い時間を使ってしまえば、サワくんに発覚するおそれがあります。そのため最小の本数を事前に計算することにしました。

ただし、横線は縦線をまたぐことができず、複数の横線がまったく同じ高さになることは出来ないものとし、また全ての横線は水平でなければいけません。


入力

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

W H
a_0 a_1 a_2 ... a_{H-1}
b_0 b_1 b_2 ... b_{W-1}
  • 縦線の本数を表す W\ (3 \leq{} W \leq{} 7) と既に書き込まれた横線の本数を表す H\ (0 \leq{} H \leq{} 100,000)1 行目に与えられる。
  • 2 行目には既に書き込まれている上から n 本目の横線の左側の端点が接する縦線の位置 a_n\ (0 \leq{} a_n \leq{} W-2) が与えられる。
  • 3 行目には改竄かいざん結果が与えられる。左から b_{m}\ (0 \leq{} b_{m} \leq{} W - 1) 番目の縦線の上端が、左から m 番目の縦線の下端に繋がることがオカモトくんの望みである。

出力

改竄に必要な最小本数を1行で出力せよ。出力の末尾には改行を入れること。

配点

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

  • H \leq{} 100 を満たすテストケース全てに正解した場合は、45 点が与えられる。
  • 全てのテストケースに正解した場合は、上記とは別に 105 点が与えられる。

入力例1

3 1
0
1 2 0

出力例1

1

サワくんが作成したあみだくじは下記のようになります。

0 1 2
| | |
+-+ |
| | |
| | |
1 0 2

1 本の横線を書き足すことでオカモトくんの望む結果に改竄かいざんすることができます。

0 1 2
| | |
+-+ |
| +-+
| | |
1 2 0

入力例2

4 4
0 2 0 2
3 2 1 0

出力例2

2

サワくんが作成したあみだくじは下記のようになります。

0 1 2 3
| | | |
+-+ | |
| | +-+
+-+ | |
| | +-+
| | | |
0 1 2 3

2 本の横線を書き足すことでオカモトくんの望む結果に改竄かいざんすることができます。

0 1 2 3
| | | |
+-+ | |
| | +-+
| +-+ |
+-+ | |
| | +-+
| +-+ |
| | | |
3 2 1 0
D - ほぼピタゴラスの三角形

Time Limit: 5 sec / Memory Limit: 256 MB

問題文

ヨシオくんは次のような三角形を「ほぼピタゴラスの三角形」と呼ぶことにしました。

  • 辺の長さ a, b, c が全て自然数
  • gcd (a, b, c) = 1
  • a \leq b \leq c
  • a^2 + b^2 + s^2 = c^2

しかし、ヨシオくんには「ほぼピタゴラスの三角形」が何個あるのか見当がつきません。

周長の上限 L および s が与えられるので、ヨシオくんに代わり、「ほぼピタゴラスの三角形」の個数を数えてください。


入力

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

L s
  • 三角形の周長 a + b + c の上限を表す整数 L ( 1 \leq L \leq 10^8 ) と s ( 1 \leq s \leq 50 ) が空白区切りで与えられます。

出力

条件を満たす三角形の個数を 1 行で出力してください。

出力の末尾には改行を入れてください。

配点

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

  • L \leq 10000 を満たすテストケース全てに正解した場合は、60 点が与えられます。
  • 全てのテストケースに正解した場合は、上記とは別に 140 点が与えられます。

入力例1

30 1

出力例1

2

条件を満たす三角形は (2,2,3)(4,8,9) です。


入力例2

50 7

出力例2

1

条件を満たす三角形は (6,6,11) のみです。

E - 天下一コップ

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

N 個の長方形がある。 i 番目の長方形は幅が w_i で高さが h_i である。

N 個の長方形を好きな順序で並べてコップを作る。 このとき、それぞれの長方形は回転させずに、すべての長方形の底辺が一直線上にあるようにする。 また、隣り合う長方形同士がちょうど接するようにする。

図 1 : コップの例

コップを水で満杯にすることを考える。 このとき、座標 P に水が存在するための必要十分条件は以下である。

  • P はどの長方形の内部にもない。
  • P から左および右向きへ半直線を引いたとき、どちらの半直線もいずれかの長方形と共有点を持つ。

コップを水で満杯にしたとき、水が存在する領域の総面積を 容積 と呼ぶ。

図 2 : コップを水で満杯にした例 (容積 71)

長方形を並べてコップを作る作り方は全部で N! 通りである。それら N! 通りのコップの容積の和を 10^9+7 で割った余りを求めよ。


入力

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

N
w_1 h_1
w_2 h_2
:
w_N h_N
  • 1 行目には、長方形の個数を表す整数 N (3≦N≦10^5) が与えられる。
  • 2 行目からの N 行のうち i 行目には、i 番目の長方形の幅と高さを表す整数 w_i,h_i (1≦w_i,h_i≦10^9) が空白区切りで与えられる。

部分点

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

  • 3≦N≦8 を満たすデータセットに正解した場合は 15 点が得られる。
  • 3≦N≦2,000 を満たすデータセットに正解した場合はさらに 55 点が得られる。
  • 3≦N≦10^5 を満たすデータセットに正解した場合はさらに 70 点が得られる。合計で 140 点となる。

出力

N! 通りのコップの容積の和を 10^9+7 で割った余りを出力せよ。 出力の末尾には改行を入れること。


入力例1

3
1 4
1 5
4 1

出力例1

24

6 通りのコップの容積の和は 24 である。


入力例2

4
1 1
1 2
1 2
1 2

出力例2

12

幅および高さが等しい長方形同士も区別して並べる。


入力例3

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

出力例3

1881888
F - 根付き木のみさわさん

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

高橋君の家の庭には、頂点 1 を根とする一本の根付き木である、みさわさんが生えています。

i 日目の朝、みさわさんは M_i 個の頂点 v_{i,1}, …, v_{i,M_i} に実をつけます。

しかし、同じ日の晩には鳥がやってきて、残っているすべての実を食べてしまいます。

高橋君は、一日に一回、みさわさんの頂点をひとつ選んでゆさぶることができます。

頂点 w をゆさぶると、w の子孫 (w 自身も含む) である頂点についている実をすべて得られます。

高橋君は、 i 日目に、みさわさんから K_i 個以上の実を取りたいです。

高いところが好きな高橋君のために、ゆさぶることで K_i 個以上の実を得ることができる頂点のうち、根からもっとも遠いものをもとめ、その根からの距離を教えてください。

ただし、各頂点に対し、根からの距離とは、根からその頂点への唯一の単純なパスに含まれる辺の数を表します。


入力

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

N
a_1 b_1
a_2 b_2
:
a_{N-1} b_{N-1}
Q
M_1 K_1
v_1_1 v_1_2 ... v_1_{M_1}
:
M_Q K_Q
v_Q_1 v_Q_2 ... v_Q_{M_Q}
  • 1 行目には、みさわさんの頂点の個数を表す整数 N (3≦N≦10^5) が与えられる。
  • 2 行目からの N-1 行のうち i 行目には、i 番目の辺の接続している 2 頂点を表す整数 a_i,b_i (1≦a_i<b_i≦N) が空白区切りで与えられる。
    • このとき、みさわさんが木であることが保証されている。
  • N+1 行目には、高橋君が実を取りつづける日数を表す整数 Q (1≦Q≦10^5) が与えられる。
  • N+2 行目からの 2Q 行のうち、
    • 2i-1 行目には、i 日目にみさわさんがつける実の数を表す整数 M_i と、高橋君が取りたい実の数を表す整数 K_i (1 ≦ K_i ≦ M_i ≦ N) が与えられ、
    • 2i 行目には、i 日目にみさわさんが実をつける頂点を表す M_i 個の整数が与えられる。
  • 但し、入力は ΣM_i ≦ 10^5 をみたす。

部分点

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

  • 1≦N≦100 を満たすデータセットに正解した場合は 20 点が得られる。
  • 全てのデータセットに正解した場合はさらに 110 点が得られる。合計で 130 点となる。

出力

Q 日分の入力について、条件を満たす頂点のうち、根からもっとも遠い頂点までの距離を、 1 行ずつ出力せよ。 出力の末尾には改行を入れること。


入力例1

5
3 5
1 2
2 3
3 4
3
2 2
4 5
1 1
1
2 1
2 1

出力例1

2
0
1
  • 1 つ目のクエリでは、みさわさんは 2 つの頂点 4,5 に実をつけます。このうち 2 つの実を得られる頂点のうち、もっとも根から遠い頂点は 3 であり、この頂点の根からの距離は 2 です。
  • 2 つ目のクエリでは、みさわさんは 1 つの頂点 1 に実をつけます。このうち 1 つの実を得られる頂点のうち、もっとも根から遠い頂点は 1 であり、この頂点の根からの距離は 0 です。
  • 3 つ目のクエリでは、みさわさんは 2 つの頂点 2,1 に実をつけます。このうち 1 つの実を得られる頂点のうち、もっとも根から遠い頂点は 2 であり、この頂点の根からの距離は 1 です。

入力例2

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

出力例2

1
0
0
0
2

入力例3

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

出力例3

2
1
2
1
1
G - 天下一ゲーム

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

高橋君と青木君は暇つぶしのためにグラフを使ったゲームをすることにした。

ゲームは次の 3 ステップで行われる。

  • 青木君が頂点数 N、辺数 M のグラフを用意する。グラフの頂点は 1N の整数で番号付けされており、辺は1M で番号付けされている。このグラフは多重辺や自己ループを含まない。
  • 青木君がすべての辺に相異なる 10^9 以下の正の整数を書き込む。
  • 高橋君がすべての頂点にそれぞれ 10^9 以下の正の整数を書き込む。このとき、高橋君は同じ整数を何度も書くことができる。

高橋君と青木君が整数を書き終わったグラフにおいて、以下の条件を満たす辺を「ラッキーな辺」と呼ぶことにする。

  • その辺が結ぶ頂点を u, v とすると、その辺に書かれている整数が頂点 u と頂点 v に書かれている整数のうち小さい方と一致する。

高橋君の得る点数は「ラッキーな辺」 の総数である。

青木君が辺に整数を書き終わった状態のグラフが与えられるので、高橋君の得点が最大になるような頂点への整数の書き込み方を求めよ。

なお、答えが複数考えられるときは、そのいずれか 1 つを答えよ。


入力

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

N M
u_1 v_1 a_1
u_2 v_2 a_2
:
u_M v_M a_M
  • 1 行目には青木君が用意したグラフの頂点数を表す整数 N (1 ≦ N ≦ 40) と辺数を表す整数 M (1 ≦ M ≦ N×(N-1)/2)が空白区切りで与えられる。
  • 2 行目からの M 行のうち i 行目には i 番目の辺が結ぶ 2 つの頂点の番号 u_i, v_i (1 ≦ u_i < v_i ≦ N)と辺に書かれた整数 a_i(1 ≦ a_i ≦ 10^9) が空白区切りで与えられる。
  • 与えられるグラフは多重辺や自己ループを含まない。
  • a_i(1 ≦ i ≦ N)の値は相異なる。

部分点

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

  • 1 ≦ N ≦ 20を満たすデータセットに正解した場合は 90 点が与えられる。
  • 1 ≦ N ≦ 40を満たすデータセットに正解した場合はさらに 130 点が与えられる。合計で220点となる。

出力

出力は N 行からなる。 i 行目には高橋君の得点が最大になるように整数を書き込んだ時に i 番目の頂点に書き込まれる正の整数を出力せよ。 各整数の値は 10^9 を超えてはならない。 出力の末尾に改行を入れること。


入力例1

8 7
1 2 1
2 3 3
3 4 2
4 5 7
5 6 4
6 7 6
7 8 5

出力例1

1
3
4
2
4
9
6
5

上記出力例のように整数を書き込むと、1, 2, 3, 5, 6, 7番目の辺が「ラッキーな辺」となる。よって高橋君は 6 点を得る。

これより多い点数を得ることのできる書き込み方はない。


入力例2

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

出力例2

7
6
11
9
17

4, 7, 9, 10番目の辺が「ラッキーな辺」になる。


入力例3

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

出力例3

14
15
6
1
10
8
14
9
12
4
3
5

グラフは連結とは限らない。