Lv.1 だいがくぐらし!

リソース制限

C / C++ Java Python2 / Python3
時間制限 1秒 1秒 5秒
メモリ制限 256MB 256MB 256MB

問題文

K君の朝は遅い。
K君のその日最初の講義への出席状況は芳しくなく、
一週間前の段階では、あと1回遅刻をすればその講義の単位を落としてしまう状態だった。

K君は、家を出て大学に着くまで$A$分かかるとし、
K君の最近の一週間の「家を出た時刻」と、「その日最初の講義が始まる時刻」の履歴が与えられるとき、
各講義について、単位取得の可能性があるかどうかを判定せよ。

なお、K君は大学に着いた瞬間に教室に着席できるため、
大学に着いた時刻 > 講義が始まる時刻のときのみ、遅刻と判定されるものとする。

入力

A
LH_1 LM_1 AH_1 AM_1
LH_2 LM_2 AH_2 AM_2
LH_3 LM_3 AH_3 AM_3
LH_4 LM_4 AH_4 AM_4
LH_5 LM_5 AH_5 AM_5
LH_6 LM_6 AH_6 AM_6
LH_7 LM_7 AH_7 AM_7

Aは、K君が家を出て、大学に着くまでにかかる時間(単位:分)である。
$LH_i$$LM_i$は、$i$番目の曜日の「家を出た時刻」が$LH_i$$LM_i$分であったことを表す。
$AH_i$$AM_i$は、$i$番目の曜日の「最初の講義の開始時刻」が$AH_i$$AM_i$分であったことを表す。

出力

全ての曜日の最初の講義について、単位取得の可能性があるなら

SAFE

単位取得の可能性が無いなら

DEAD

と各行に出力せよ。

出力は7行からなるはずである。

末尾に改行を出力すること。

制約

  • $1≦A≦180$
  • $0≦LH_i, AH_i≦20$
  • $0≦LM_i, AM_i≦59$

入力は全て整数である。

サンプル

入力1

60
9 0 10 30
9 20 10 30
9 30 10 30
9 31 10 30
10 30 8 50
15 5 16 10
20 59 0 0

出力1

SAFE
SAFE
SAFE
DEAD
DEAD
SAFE
DEAD

1番目、2番目の曜日に関しては、講義開始時刻前に出席できています。
3番目に関しては、講義開始時刻と同時に到着しているため、SAFEです。
4番目は、到着時刻が講義開始時刻を1分超過しているため無慈悲にもDEADです。
5番目は、家を出た時刻には、恐らく講義が終わっている(少なくとも、始まってはいる)のでもちろんDEADです。
6番目は、講義開始時刻が遅いため、SAFEです。
7番目は、徹夜して大学に居なければならなかったので、家を出発している時点でDEADです。

Lv.2 ディジタル信号処理

問題文

あるアナログ信号$f(t)$をサンプリング、量子化し、
そのうちの$N$点を切り出したディジタル信号$f[i], i = 0, 1, … , N - 1$が与えられる。

$f[i]$の基本周期(サンプリング点単位)を出力せよ。
基本周期が存在しなければ、代わりに$N$を出力せよ。

なお、ここでは基本周期は、
ある正の整数$k < N$が存在して、$i = 0, 1, …, N - 1$を満たす$i$全てについて、
$f[i] = f[(i + k)\bmod N]$
が成り立つような$k$のうち最小のものとする。
また、$x\bmod N$$x$$N$で割ったあまりを表す。

サンプリング、量子化については、各自調べて欲しい。

入力

N
f[0] f[1] … f[N-1]

$N$は、与えられるディジタル信号の点の数を表す。 $f[i]$は、$f$$i + 1$番目の点の値を表す。

出力

基本周期を一行に出力せよ。
基本周期が存在しない場合、代わりに$N$を出力せよ。

末尾に改行を出力すること。

制約

  • $1≦N≦1000$
  • $-1000≦f[i]≦1000$

入力は全て整数である。

サンプル

入力1

14
1 2 3 1 2 3 4 1 2 3 1 2 3 4

出力1

7

$k = 7$のとき、基本周期の条件を満たします。

入力2

14
1 2 1 2 1 2 3 4 1 2 1 2 1 2

出力2

14

$f[i] = f[(i + k)\bmod 14]$となる$k$が存在しないため、$N = 14$を出力します。

Lv.3 巡回レポートマン問題

問題文

K君の昼は忙しい。

K君は苦心の末、今日の昼休みの終わりが締め切りである$N$種類のレポートを書き終えた。
しかし、これらのレポートを提出しなければ単位を落としてしまう。

地図と現在地点、それぞれのレポートの提出場所と提出順序が与えられるので、
全てのレポートを提出するのに最短何分かかるかを計算して欲しい。

地図はマス目状になっており、K君は1分間に、上下左右のうちいずれかの方向へ1マス分動くことができるものとする。
ただし、移動しようとした先のマスの地形が.である場合のみ、そのマスに進むことができる。
地形が#となっているマスや、枠外のマスには足を踏み入れることが出来ない。

地図の地形等により、一部のレポートを提出できない場合がある。この場合、-1を出力せよ。
また、K君は新聞配達アルバイトで鍛えたポスト投函テクニックを用いるので、
レポートの提出自体にかかる時間は0分とする。

入力

N H W
M(11)M(12)…M(1W)
M(21)M(22)…M(2W)
…
M(H1)M(H2)…M(HW)
R_0 C_0
R_1 C_1
R_2 C_2
…
R_N C_N

$N$はレポートの種類数を表す。
$H, W$は地図の行数と列数を表す。
$M_{ij}$は、$i$$j$列($1≦i≦H, 1≦j≦W$)の座標のマップの地形を表す。
マップの地形は.#のいずれかである。
$R_0, C_0$は現在、K君の居る座標($R_0$$C_0$列目)である。
$R_i, C_i, i > 0$はi番目に提出するレポートの提出場所の地図上の座標($R_i$$C_i$列目)である。
$R_i$$C_i$列目、及び現在地の地形は必ず.である。

出力

全てのレポートを提出するのかかる最短時間(分)を1行に出力せよ。
一部のレポートを提出することが出来ない場合は-1を1行に出力せよ。
末尾に改行を出力すること。

制約

  • $1≦N≦10000$
  • $1≦W, H≦10$
  • $1≦R_i≦H, 1≦C_i≦W$

入力は全て整数である。

サンプル

入力1

3 5 5
..#..
..#..
..#..
..#..
.....
1 1
1 5
1 1
1 5

出力1

36

1行1列目と1行5列目間を3回移動します。
1行1列目と1行5列目間を移動するために必要な最短時間は12分なので、 12 * 3 = 36を出力します。
2番目のレポートを最初に出せばもっと早く提出し終えることができますが、
K君は提出順を律儀に守るため、最低36分かかります。

入力2

12 10 10
..........
#########.
........#.
.######.#.
.#....#.#.
.#.#..#.#.
.#.####.#.
.#......#.
.########.
..........
1 1
6 6
6 6
6 6
6 6
6 6
1 1
6 6
6 6
6 6
6 6
6 6
6 6

出力2

174

昼休み中の提出は絶望的ですね。

入力3

1 1 3
.#.
1 1
1 3

出力3

-1

提出は絶望的です。

Lv.4 物理実験

問題文

K君の午後の授業は物理実験である。
K君はモデル化された物質「物質K」について実験している。
実験の内容は以下の通りである。


ここに物質Kが$N$個ある。 物質Kは、空間Aと空間Bのどちらかに存在する。
$i$個目$(1≦i≦N)$の物質Kが空間Aにある場合、全体エネルギーが$A_i$増え、
空間Bにある場合、全体エネルギーが$B_i$増える。

さらに、$M$組の物質Kのペアには条件がある。 $j$個目$(1≦j≦M)$の条件は以下である。

$C_j$個目の物質Kと$D_j$個目の物質Kがそれぞれ別の空間にある場合、
それぞれが引き合うので、全体のエネルギーが更に$E_j$増える。

物質Kたちは、全体エネルギーができるだけ少なくなるように自ら空間Aまたは空間Bに移動する。
全体エネルギーが最小になる時の全体エネルギーを推測せよ。


K君は優秀なプログラマーであるあなたに、この答えを出力するプログラムの作成を依頼した。
彼の代わりにプログラムを作って欲しい。

入力

N M
A_1 B_1
A_2 B_2
…
A_N B_N
C_1 D_1 E_1
C_2 D_2 E_2
…
C_M D_M E_M

$N$は物質Kの数を表す。
$M$は追加条件の数を表す。

$A_i$$B_i$は、$i$個目の物質Kをそれぞれの空間に入れた時に増加する全体エネルギーである。

$C_j$, $D_j$, $E_j$は、$j$個目の追加条件についての情報である。
各条件は$C_j$個目と$D_j$個目の物質Kがそれぞれ別の空間にある場合、
全体エネルギーが更に$E_j$増えることを表す。

出力

1行目に全体エネルギーが最小になる時の全体エネルギーを出力せよ。
末尾に改行を出力すること。

制約

  • $1≦N≦100$
  • $0≦M≦N(N-1)/2$ かつ $0≦M≦1000$を満たす。
  • $0≦A_i, B_i≦1000$
  • $1≦C_j<D_j≦N$
  • 内容が同じ条件、及び矛盾する条件は含まれない。(条件$j$と条件$k(j≠k)$に対して、$C_j=C_k$かつ$D_j=D_k$となることはない。)
  • $0≦E_j≦1000$

入力される変数は全て整数である

部分点制約

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

  • 部分点1: 全体の配点の10%分のテストケースは、$1≦N≦16$ かつ $M=0$を満たす。
  • 部分点2: 全体の配点の20%分のテストケースは、$1≦N≦16$ かつ $M≦1$を満たす。
  • 部分点3: 全体の配点の40%分のテストケースは、$1≦N≦16$ を満たす。
  • 部分点4: 全体の配点の20%分のテストケースは、$17≦N≦100$ かつ 全ての$1≦j≦N$について、$D_j - C_j = 1$を満たす。
  • 部分点5: 全体の配点の80%分のテストケースは、全ての$1≦j≦N$について、$1≦D_j - C_j≦16$を満たす。

例えば、「$1≦N≦16$ かつ $M≦1$」を満たす入力に対して、
リソース制限を満たし正しい答えを出力するプログラムを提出すれば、20%分の得点が保証される。(部分点2)
また、部分点3と部分点4は排反であるから、2つのテストケース両方に対応するプログラムを作ることで、60%分の得点を得ることができる。

1つのアルゴリズムを使うのではなく、テストケースによって使うアルゴリズムを切り替えるのも良い方法である。

サンプル

入力1

3 1
1 2
4 2
5 5
1 2 3

出力1

9

1個目の物質Kが空間B、
2個目の物質Kが空間B、
3個目の物質Kが空間Aまたは空間B
にあるとき全体エネルギーが最小の状態となり、その時の全体エネルギーは$2+2+5=9$となります。

入力2

3 2
1 5
9 2
5 5
1 2 3
1 3 1

出力2

11

1個目の物質Kが空間A、
2個目の物質Kが空間B、
3個目の物質Kが空間A
にあるとき全体エネルギーが最小の状態となり、その時の全体エネルギーは$1+2+5+3=11$となります。