alexjercan/bugnet huggingface dataset:
どうぶつの盛り2013

Sim Forest 2013というゲームがある。このゲームでは、プレイヤーは森の神様となって森林の動物を育成することができる。

動物は卵から孵化し、繁殖する。卵は特定の条件を満たすと、一定の確率で突然変異し新しい種族の動物が生まれる。

このゲームには動物事典というものが存在し、新しい種類の動物を入手すると動物辞典に記録されていく。

盛さんは Sim Forest 2013の熱狂的なプレイヤーである。彼の動物辞典は残り1種族を埋めると完成となる。

盛さんはこの残りの1種族を、卵からの突然変異により入手することにした。

ゲーム進行は以下のとおりである。

ステージ開始時に n個 の卵が出現する。

ステージ開始から s分後 に n個 の卵が孵化する。

各卵は、*出現してから孵化するまで* のすべての期間で（出現時と孵化する瞬間も含む）、特定の曜日かつ特定の時間帯内であればそれぞれ 1/p の確率で目的の動物に突然変異する。

ステージ開始から t分後 にステージが終了し、その直後にまた同じステージが開始する(n個の卵がある状態で開始する。経過時間はリセットされない。)

ステージは連続で m回 繰り返される。

このゲームは、以下の仕様を満たしている。

卵から生まれた動物が卵を生むことは無い。

卵が孵化するタイミングは、1回のステージにつきステージ開始からs分後の1回のみである。

盛さんは、最初のステージの開始曜日・開始時刻を任意に設定できる。(二番目以降のステージの開始時刻は、直前のステージの終了直後となる)

突然変異可能な曜日として、{全ての曜日, 日曜, 月曜, 火曜, 水曜, 木曜, 金曜, 土曜} のいずれかが与えられる。

突然変異可能な時間帯として、{全ての時間帯, 朝, 夜} のいずれかが与えられる。

入力として s, n, t, 突然変異可能な曜日・時間帯, p, m が与えられる。
全ステージ終了までに突然変異が起こる確率が最大になるように最初のステージの開始曜日・開始時刻を設定したときの、その確率をもとめよ。

Input

入力は複数のデータセットからなる。各データセットは以下の形式で与えられる。

s n t weekday time p m

各データセットは、ステージ開始から卵が孵化するのにかかる時間 s, ステージ開始時に出現する卵の数 n, 1つのステージが終了するまでにかかる時間 t,
突然変異可能な曜日 weekday, 突然変異可能な時間帯 time, 突然変異する確率の逆数 p (突然変異する確率は 1 / p である), 全ステージ数 m を含む。

入力は以下の制約を満たす。

0 < s <= 500

0 < n <= 100

s < t <= 1000

weekday ∈ {All, Sun, Mon, Tue, Wed, Thu, Fri, Sat}

All は、全ての曜日を意味する

time ∈ {All, Day, Night}

All は [0:00~24:00), Day は [6:00~18:00), Night は [18:00~6:00) の時間帯を意味する。

1 <= p <= 99999

1 <= m <= 100

入力の終わりは以下の行で与えられる。

0 0 0 None None 0 0

Output

各データセットごとに、全ステージ終了までに突然変異が起こる確率が最大になるように最初のステージの開始曜日・開始時刻を設定したときの、その確率を出力せよ。
解答の誤差は 0.00000001 (10-8) を超えてはならない．精度に関する条件を満たしていれば，小数点以下は何桁数字を出力しても構わない。

Sample Input

1 1 3 All All 1 1
2 37 5 All Night 150 1
16 2 20 All Day 5 10
1 14 15 Mon All 20000 100
0 0 0 None None 0 0

Output for Sample Input

1.0000000000
0.2192439716
0.9884707850
0.0649933899
双子の読書感想文

双子のアミとマミが通う学校では早くも夏休みに突入し，今年もおびただしい量の宿題が出された．
しかし，遊び盛りの2人は今日も宿題には一切手をつけずに外へ遊びに行こうとしていた．
このままでは夏休み最終日に泣きを見るのは明らかなので，保護者役のあなたは，心を鬼にして今日は読書感想文の宿題が終わるまで2人を家から出さないことにした．

準備の良いあなたは既に図書館から全ての課題図書を借りてある．
ただし，図書館の規則により各本は1冊ずつしか借りられていない．
さて，教育上の理由から2人には互いに協力することなく，それぞれ全ての本を読み，感想を書いてもらう事にした．
加えて，本の返却期限が近いため，まずはなるべく早くすべての本を読み終えるようにしてもらう事にした．
そして，あなたはその条件下でなるべく早く宿題が終わるような宿題の進め方を考えることにした．
ここで，本を読み終えた時間，宿題を終えた時間は，それぞれ双子の両方が作業を終えた時間で考える．

各本は1冊ずつしかないため，2人が同時刻に同じ本を読むことはできない．
加えて，大人の事情により，ある本を読み始めたらそれを中断する事はできず，ある本についての感想文を書き始めたらそれを中断することもできない．
当然ながら，読んでいない本について感想を書くこともできない．
なお，アミとマミは双子であるため，各本について読むのにかかる時間，感想文を書くのにかかる時間は2人で共通している．

例えば，3冊の本があり，それぞれ本を読むのにかかる時間，感想文を書くのにかかる時間が以下の通りであるとする．

本を読む時間
感想文を書く時間

本1
5
3

本2
1
2

本3
1
2

この場合は，図C-1のように宿題を進めると，時間10で全ての本を読み終え，時間15で宿題を終える事ができる．
図C-2の進め方では時間14で宿題を終えているが，本を読み終える時間が最短でないため，今回は採用できない．
また，図C-3のように2人が同時に同じ本を読んだり， 図C-4のように本を読むのを中断したり，読んでいない本の感想を書く事もできない．

図 C-1: 最短で宿題を終わらせる進め方の例

図 C-2: 本を読み終える時間が最短でない例

図 C-3: 2人が同時に同じ本を読んでしまっている例

図 C-4: 読んでいない本の感想を書いたり，作業を中断したりしている例

様々な大人の事情を考慮しつつ，遊びに行きたがっている双子のためになるべく早く宿題が終わるような進め方を考えてあげよう．

Input

入力は複数のデータセットから構成される．各データセットの形式は次の通りである．

N
r1 w1
r2 w2
...
rN wN

Nは課題図書の数を表す整数であり，1以上1,000以下と仮定して良い．

続くN行は課題図書についての情報を表す．
各行はスペースで区切られた2つの整数を含み，ri (1 ≤ ri ≤ 1,000) は i 番目の本を読むのにかかる時間，wi (1 ≤ wi ≤ 1,000) は i 番目の本の感想文を書くのにかかる時間を表す．

N=0 は入力の終わりを示す．
これはデータセットには含めない．

Output

各データセットについて，2人が全ての本を読み終えるまでの時間を最小にしたときの，全ての感想文を書き終えるまでの最小の時間を1行に出力しなさい．

Sample Input

4
1 1
3 1
4 1
2 1
3
5 3
1 2
1 2
1
1000 1000
10
5 62
10 68
15 72
20 73
25 75
30 77
35 79
40 82
45 100
815 283
6
74 78
53 55
77 77
12 13
39 42
1 1
0

Output for Sample Input

14
15
3000
2013
522
小野小町の編集合戦

近所に住む秋田博士は在野の歴史研究家であり, 最近小野小町に関する新たな古文書を発見したそうだ.

小野小町が交際を望む深草少将に100夜欠かさず通い続けることを条件に出したという伝説は広く知られているが, 彼の主張によると, この発見により新たに, 2人は毎晩とあるゲームをしていたことがわかったという.

そのルールは以下の通りである.

最初に召使が編集回数と有効な数式を決める

深草少将, 小野小町, 深草少将, 小野小町,... という順に交互に数式を編集する

深草少将と小野小町が合わせて召使が決めた回数の編集を行うとゲームは終了する

1回の数式の編集において, 数式に 1 文字追加, または数式から 1 文字削除のいずれかができる

数式が無効になるような編集をしてはならない

有効な数式の詳しい定義は下記を見てほしい.

このゲームにおいて, 最終的な数式の計算結果が大きいほど,
深草少将の通うべき日数を減らしてあげることになっていたらしい.
すなわち, 深草少将は結果を最大化させることが目的であり,
小野小町は最小化させることが目的である.

ところで, 古文書には召使が決めた編集回数と数式については記録が残っていたのであるが,
肝心の結果の方は虫食いにより読めなくなってしまっていた.
博士は結果に興味を持ち, 自力で計算してみようと思ったものの, ゲーム理論が得意でない彼には難しすぎたため, とりあえず近所のあなたに助けを求めてきたようだ.
そこであなたはプログラムを書いて彼に協力することにした.

平安時代に現代的な数式があったということに胡散臭さを感じるかもしれないが, 近所付き合いという大義の前に, そのような些事を気にするべきではないのだ.

有効な数式の定義

このゲームにおける有効な数式とは, "(", ")", "*", "+", "-", "&", "^", "|", "0" - "9" の 18 種類の文字のみからなる空でない文字列であり,
さらに, 有限個の項を2項演算子で結合したものである.
書き下すと,

[項][2項演算子][項][2項演算子]...[2項演算子][項]

のようになる.

項とは, "("[有効な数式]")" のようにカッコで挟まれた有効な数式, または正の整数である.
正の整数は, 先頭に "0" を持たない, 数字のみからなる文字列である.

最後に, 2項演算子とは, "*", "+", "-", "&", "^", "|" のいずれかちょうど 1 文字である.
詳しい定義は下記を見てほしい.

以上の規則から,

"1+-1" のように2文字あるので有効な2項演算子でないもの,

"+1" のように項を2項演算子で結合したものでないもの,

"2)", "(3" のようにカッコの対応がとれていないので有効な項でないもの,

"0", "01" のように 0 で始まり有効な正の整数の表現でないもの

などは, 無効な数式であるとみなされる.

一方で,

"(1+2)" のように最も外側にカッコが付いているもの,

"((1+2))*3" のように2重にカッコが付いているもの,

"(1)+3" のように括弧内に数しかないもの,

"(1*2)+3" のように2項演算子の優先順位と同じになるもの,

などは, 冗長ではあるが, 上の規則の下では受理され, 有効な数式とみなされることに注意してほしい.

2項演算子の種類

このゲームにおいて, 2項演算子は "*", "+", "-", "&", "^", "|" の 6 種類がある.
それぞれ, 乗算, 加算, 減算, ビットごとの論理積, ビットごとの排他的論理和, ビットごとの論理和である.
なお, ビット演算を考えるとき, 負の数は十分大きな桁数の2の補数で表現されていると見なされる. すなわち, 普通の符号付き整数型で計算すると考えてもよい.

また, 優先順位は高い方から,

*

+, -

&

^

|

の順である.

なお, + より * の方が優先順位が高いとは,

2*4+3*5

のような式において * のほうが先に計算されるという意味であり, 言い換えると,

(2*4)+(3*5)

となるということである.

また, すべての2項演算子は左結合であるとする.
これは,

2^4^3^5

のような式において左から順に計算するという意味であり, 言い換えると,

((2^4)^3)^5

となるということである.

Input

入力は複数のデータセットから構成される. 各データセットは1回のゲームで召使が決めた編集回数と数式を表し, その形式は以下の通りである.

N Expression

N は召使が決めた編集回数であり, 1 ≤ N ≤ 11 と仮定してよい.
また, Expression は召使が決めた数式であり, "(", ")", "*", "+", "-", "&", "^", "|", "0" - "9" の 18 種類の文字のみからなる, 7 文字以下の空でない文字列として与えられる.
なお, 上で定義した有効な数式のみが与えられ, 無効な数式が与えられることはないと仮定してよい.

入力の終わりは,

0 #

で表される.

なお, データセットは 99 個以下であると仮定してよい.

Output

各データセットに対して, 両者が最善を尽くしたときの最終的な数式の計算結果を 1 行で出力せよ.
それ以外の余計な文字を出力してはならない.

Sample Input

1 1
2 2
3 1+2*3-4
3 1|2^3&4
3 (1+2)*3
3 1-1-1-1
0 #

Output for Sample Input

91
2
273
93
279
88
テトラ姫のパズル

パレス王国のテトラ姫は無類のパズル好きとして知られており，最近は自身が考案した「テトラパズル」に熱中している．
これは，正三角形のマスを敷き詰めたボードと，テトラブロックと呼ばれる 4 枚の正三角形のパネルからなる正四面体のブロックを使ったパズルである．
パズルの目的は，ボード上のすべてのテトラブロックを以下の条件をみたすように展開することである．

展開されたテトラブロックが，置かれていたマスおよび，それぞれに指定された異なる 2 つのマスを覆っている

どのマスも，2 つ以上のパネルで覆われていない

図F-1はテトラパズルの問題例および，その解答例である．
★のマスと●のマスにテトラブロックが置かれており，それぞれが☆のマスと○のマスを覆うように指定されている．
解答例において，横線が引かれたマスは★のマスに置かれていたテトラブロックを展開して覆ったマス，縦線のマスは●のマスに置かれたテトラブロックで覆ったマスである．

図 F-1: テトラパズルの問題例(左)および解答例(右)

図F-2は，上図の問題例における無効な解答例である．
左の例では★のマスの真上のマスが2つのパネルで覆われており，右の例ではそれぞれがテトラブロックを展開して得られる形状でないため，答えとしては認められない．

図 F-2: 無効な解答例

テトラ姫はパズルの面白さを多くの人に知ってもらうべく，来たる夏の祭典に向けてパズルの問題集を作った．
そして，王国で二番目のパズル好きとして姫から信頼を置かれているあなたは，問題集のチェック担当に任命された．

さて，チェック作業を進めていたあなたは困った事に気が付いた．
問題集には解が存在しないパズルが含まれているようなのだ．
なるべく姫の作ったパズルを尊重したいと考えたあなたは，解が存在しないパズルについて，どれか 1 個のテトラブロックをそのテトラブロックが覆うべきマスの情報ごと削除することで，パズルを解けるものに変えることにした．
姫から言い渡されたチェックの締切りまではあと3時間しかない．
問題集を見なおして，手早く修正を済ませてしまおう．

Input

入力は複数のデータセットから構成される．
各データセットの形式は次の通りである．

n
x1a y1a x1b y1b x1c y1c
x2a y2a x2b y2b x2c y2c
...
xna yna xnb ynb xnc ync

n (2 ≤ n ≤ 5,000) はボードに置かれたテトラブロックの数を表す整数である．
各テトラブロックには 1 から n の番号が割り当てられている．

続く n 行は，それぞれ 1 個のスペースで区切られた 6 個の整数からなる．
(xia, yia) は i 番目のテトラブロックが置かれているマスの座標を表し，(xib, yib) および，(xic, yic) は，それぞれ i 番目のテトラブロックを展開した時に覆うべきマスの座標を表す．
与えられる x 座標および y 座標の絶対値は 20,000 以下と仮定して良い．
また，与えられる座標は全て互いに異なると仮定して良い．
すなわち，同じマスに 2 個以上のテトラブロックが置かれる事や，テトラブロックが置かれているマスが覆うべきマスとして指定される事や，覆うべきマスが重複して指定される事はない．

各マスには図F-3のように座標が割り当てられている．

図 F-3: マスに割り当てられた座標

n=0 は入力の終わりを示す．これはデータセットには含めない．

Output

各データセットについて，テトラブロックを除くことなくパズルが解ける場合は Valid をそれぞれ 1 行に出力しなさい．
テトラブロックを 1 個だけ除くことでパズルが解けるようになる場合は Remove を 1 行に出力し，続けて除くことでパズルが解けるようになるテトラブロックの番号を小さいものから順にそれぞれ 1 行に出力しなさい．
2 個以上のテトラブロックを除かないとパズルが解けるようにならない場合は Invalid を1行に出力しなさい．

Sample Input

3
2 3 2 2 2 1
2 0 1 -1 2 -1
-2 -1 -1 -1 -2 0
6
-1 0 1 0 0 -1
-2 -1 -3 -2 -4 -2
2 -1 2 0 1 -1
4 -2 3 -2 3 -1
1 1 0 1 -1 1
-3 -1 -1 -1 -2 0
5
-1 2 0 2 1 2
-3 1 -2 1 -2 2
-2 0 -2 -1 -3 0
1 -1 0 -1 -1 -1
1 0 2 0 2 -1
4
-2 0 -2 -1 -3 -1
-1 -1 0 -1 1 -1
2 -1 2 0 3 -1
-1 0 0 0 1 0
5
-2 1 3 -1 2 1
-5 2 -5 3 -4 2
-2 -1 0 -1 -3 -1
4 2 5 2 5 3
1 -1 2 -1 -1 -1
0

以下の図はそれぞれサンプルの配置を示している．

図 F-4: 1番目のサンプル

図 F-5: 2番目のサンプル

図 F-6: 3番目のサンプル

図 F-7: 4番目のサンプル

図 F-8: 5番目のサンプル

Output for Sample Input

Remove
1
Remove
2
6
Valid
Remove
1
2
3
4
Invalid
鏡の迷路

誇り高き勇者であるあなたは、ついに魔王の元へ辿り着こうとしていた。しかし、魔王がいる玉座の間に辿り着くためには、魔王が用意した最終マップをクリアしなければならない。

このマップにおいては、全てのものが、上空から見た二次元平面図のように変化してしまう。人間は、このマップにおいては、ただの点に変形してしまう。マップは、1本の直線によって、2つの区域に区切られている。そして、ある一方の区域に人がいるとき、もう一方の区域の、直線に対して線対称となる位置に、人の鏡像が映し出される。

2つの区域それぞれには、複数の建物が存在する。建物と言っても、このマップでは、いくつかの点を繋いで出来上がる多角形であり、辺で囲まれた内側、および辺上が建物の内部となる。建物は、人とは違い、別の区域に鏡像を作り出すことはない。

あなたがこのマップに侵入すると、魔王の魔法により、いずれかの建物の内部に拘束される。あなたは、拘束されている建物の内部に1つだけ存在する脱出点に移動することでしか、マップをクリアすることはできない。さらに、あなたは、魔王に呪いをかけられ、自身の動きを制限されている。その制限とは、あなたのいる位置、およびあなたの鏡像の位置が、いずれかの建物内部に存在しなければならないというものである。この制限さえ守れば、あなたは自由に建物内部を移動することができる。

さて、あなたは、一刻も早くこのマップをクリアし、世界を滅ぼさんとする魔王を打ち倒さなければならない。あなたの初期位置が与えられたとき、脱出点へ移動するための最短路の距離を求めよ。ただし、脱出点へ移動できない場合は、永遠マップから脱出することができず、朽ち果てていくのみである。

Input

入力は複数のデータセットから構成される。
各データセットの形式は次の通りである。

N
BUILDING1
...
BUILDINGN
SX SY GX GY
LX1 LY1 LX2 LY2

入力は、全て整数値である。
また、座標情報は、全て -10,000 <= x, y <= 10,000 であると仮定してよい。

N(1 <= N <= 100)は、建物の数である。その次に、N個の建物の情報が入力される。
BUILDINGiは、次の形式で入力される多角形である。

M
X1 Y1
...
XM YM

M(3 <= M <= 50)は、多角形の頂点数を表す。
続いてM個の頂点、(Xi, Yi)が反時計回りで入力される。
(Xi, Yi)と(Xi+1, Yi+1)の頂点を繋いだ線分が多角形の一辺である。
ただし、M番目の頂点とは、1番目の頂点が繋がる。
多角形の連続する3つの頂点は、一直線上に並ばないものと仮定してよい。
また、多角形の各辺は、隣り合う辺以外とは、接触・交差することはないように入力される。
各多角形は、他の多角形に、接触・交差・内包することはない。

建物の情報が入力された後、始点(SX, SY)、脱出点(GX, GY)の情報が入力される。
始点と脱出点は、共に同じ建物の内部に存在する。
ただし、始点と脱出点の鏡像は、必ずしも建物の内部に存在するとは限らないため注意してほしい。
この場合は、もちろんマップをクリアすることはできない。
始点と脱出点は、必ず異なる位置に存在する。

最後に、直線の情報が入力される。
直線は、直線上に存在する2つの点(LX1, LY1)と(LX2, LY2)により表される。
この2つの点は、必ず異なる位置に存在する。
直線は、いずれの建物とも、接触・交差しないものと仮定してよい。

入力の終わりは、0が1つだけの行で与えられる。

Output

各データセットごとに、始点から脱出点までの最短距離を出力せよ。
解答の誤差は 0.00000001 (10-8) を超えてはならない。
精度に関する条件を満たしていれば、小数点以下は何桁数字を出力しても構わない。

脱出点まで辿り着けない場合は、"impossible"と出力せよ。

Sample Input

2
3
1 1
2 2
1 2
3
-1 1
-1 2
-2 2
1 1 2 2
0 0 0 1
2
10
1 1
7 1
7 5
5 5
5 3
6 3
6 2
3 2
3 5
1 5
10
-1 1
-1 5
-3 5
-3 3
-2 3
-2 2
-5 2
-5 5
-7 5
-7 1
2 4 6 4
0 0 0 1
2
7
-7 0
-5 0
-4 3
-3 0
-1 0
-1 4
-7 4
3
1 0
7 0
7 4
3 1 5 2
0 0 0 1
0

Output for Sample Input

1.4142135623730951
8.0
impossible

以下の図はそれぞれサンプルの配置を示している。
図G-1、G-2では、赤の経路が勇者自身の経路を示し、青の経路が勇者の鏡像の経路を示す。
図G-3では、始点から脱出点まで辿り着くことはできない。

図G-1: 1番目のサンプル

図G-2: 2番目のサンプル

図G-3: 3番目のサンプル
Problem A: 青春18きっぷ 2013

Problem Statement

会津合宿に参加予定の高槻さんは、家が貧乏であまりお金を持っていない。そのため、青春18きっぷを使用して、お金を節約しようとしている。18きっぷは、これ1枚だけで、鈍行列車ならば1日中乗り放題、改札の出入りも自由という優れものである（詳しい利用ルールについては省略）。

18きっぷの魅力は、乗り換えを行う駅で、空いている時間を使って、ご当地のお土産等を見てまわれる点である。彼女は、せっかくの機会なので、旅の途中でいろいろな駅を見て回りたいと考えている。ただし、次の電車に乗り遅れては困るため、乗り換え駅に到着した時刻から、乗り換え駅を出発する時刻までの間がT分以上のときだけ、その駅を見て回ることにした。

高槻さんの18きっぷを使った乗り換え計画が与えられるので、見て回れる駅の名前と時間を出力せよ。一番最初に出発する駅と、一番最後に到着する駅は、見て回る候補には入らないことに注意してほしい。

Input

各データセットは、以下の形式で入力される。

N T
st_time1 st_name1 ar_time1 ar_name1
st_time2 st_name2 ar_time2 ar_name2
...
st_timeN st_nameN ar_timeN ar_nameN

Nは列車に乗車する回数を表わす整数、Tは乗り換え駅を見て回れる許容時間(分)を表わす整数である。続いて、N行にわたって、列車の出発と到着のペアが与えられる。各行の入力は、st_timeiの時刻ちょうどにst_nameiの駅を高槻さんの乗る列車が出発することを、ar_timeiの時刻ちょうどにar_nameiの駅に高槻さんの乗る列車が到着することを意味する。

Constraints

1 <= N <= 10

1 <= T <= 180

st_timei、ar_timei

"HH:MM"により表わされ、HHには00以上23以下、MMには00以上59以下の2桁の数値が入る。HHが時間で、MMが分である。

00:00 <= st_time1 < ar_time1 < st_time2 < ar_time2 < ... < st_timeN < ar_timeN <= 23:59

st_namei、ar_namei

アルファベット大文字・小文字により表わされる文字列である。

1 <= 文字列の長さ <= 50

i番目の到着駅ar_nameiと、i+1番目の出発駅st_namei+1の名前は一致する。

st_name1、ar_nameN、乗り換えの駅の名前は、それぞれ異なる文字列である。

Output

各データセットについて、以下の形式で出力を行う。

M
stay_name1 stay_time1
stay_name2 stay_time2
...
stay_nameM stay_timeM

M（0 <= M <= N - 1）は、見て回れる駅の数を表わす整数である。続いて、M行にわたって、見て回れる駅のリストを時刻の昇順に出力する。各行は、stay_nameiの駅をstay_timei分間見て回れることを意味する。

Sample Input 1

8 24
05:30 Kyoto 06:37 Maibara
06:50 Maibara 07:36 Tsuruga
07:42 Tsuruga 10:03 Kanazawa
10:58 Kanazawa 12:07 Toyama
12:15 Toyama 14:12 Naoetsu
14:29 Naoetsu 15:57 Nagaoka
16:11 Nagaoka 17:14 Niitsu
17:38 Niitsu 20:06 AizuWakamatsu

Output for the Sample Input 1

2
Kanazawa 55
Niitsu 24

Kanazawa駅は、10:03に到着し10:58に出発するため、乗り換えに55分の空き時間がある。Niitsu駅は、17:14に到着し17:38に出発するため、乗り換えに24分の空き時間がある。どちらも、入力で指定された24分以上の空き時間があるため、出力する。

Sample Input 2

1 180
10:44 Koriyama 11:52 AizuWakamatsu

Output for the Sample Input 2

0

乗り換え駅は1つもないため、0と出力する。
Problem B: あみだくじ

Problem Statement

会津合宿に参加予定の高槻さんは、家が貧乏であり、いつも紙をなるべく節約して使うようにしている。彼女は、会津合宿のチーム決めのために、他の参加者の人達とあみだくじをすることになった。

この合宿のあみだくじの作り方は次のようなものである。まず、紙にN本の縦棒を平行に書く。そして、M本の横棒を上から順番に、縦棒と垂直になるように、かつ横棒の高さが全て異なるように書いていく。例えば、Sample Input 1のあみだは、図1のようになる。

ここで、高槻さん、ちょっと不満げな表情。こんなに縦長にあみだくじを書いていると紙がもったいない。もっと、高さを圧縮できるはず。ということで、彼女のために以下に示すあみだくじの高さ圧縮の問題を解いてほしい。

まず、あみだくじの高さとは、同じ高さに存在する横棒をまとめて高さ1と数えて、これを一番下の横棒まで数えた値である。ここでは、高さ圧縮を行うために、各横棒を上下に自由に動かすことができるものとする。ただし、横棒を削除することも追加することも許されない。高さ圧縮をした後のあみだくじは、必ず以下の条件を満たしている必要がある。

横棒の端点が他の横棒の端点と接していない。

圧縮後のあみだくじを辿った結果と、圧縮前のあみだくじを辿った結果が一致している。

図2は、図1を圧縮したものである。「縦棒1と2を結ぶ横棒」が一番上まで移動して、「縦棒4と5を結ぶ横棒」と同じ高さとなり、この2つで高さ1。あとは、「縦棒3と4を結ぶ横棒」と「縦棒2と3を結ぶ横棒」は、それぞれ別の高さとなり、全体で高さ3である。

与えられたあみだくじを高さ圧縮し、圧縮後の高さを出力せよ。

Input

各データセットは、以下の形式で入力される。

N M
a1
a2
...
aM

入力は全て整数である。Nは縦棒の数、Mは横棒の数を示す。続いて、M行にわたって横棒の情報が入力される。aiは、i番目の横棒が縦棒aiと、その1つ右の縦棒を結んでいることを表わしている。i番目の横棒は、i+1番目の横棒より上側に存在する。

Constraints

2 <= N <= 8

1 <= M <= 8

1 <= ai <= N - 1

Output

圧縮後のあみだくじの高さを1行で出力する。

Sample Input 1

5 4
4
3
1
2

Output for the Sample Input 1

3

Sample Input 2

4 3
1
2
3

Output for the Sample Input 2

3

高さ圧縮は行えないため、横棒の数Mを出力する。
Problem C: ホテル探し

Problem Statement

会津合宿に参加予定の高槻さんは、家が貧乏であまりお金を持っていない。彼女は、合宿のためにホテルを探しているが、なるべくお金を節約できるプランにするために、悩み中である。宿泊の合計金額が安くなるホテルの泊まり方を求めて、彼女に教えてあげよう。

宿泊するホテルの候補数は、N個であり、各ホテルをホテル1、ホテル2、...、ホテルNと呼ぶこととする。彼女は、これからD泊分の予約をこれらのホテルから選ぶことにしている。候補のホテルは全て、1泊ごとに宿泊料金が変動することがあるため、入力では各ホテルごとにD泊分の宿泊費が与えられる。

D泊分の宿泊費の合計が最小になるような、ホテルの泊まり方を出力せよ。ただし、D泊全て同じホテルに泊まる必要はないことに注意してほしい。安さのためであれば、彼女は1泊ごとにホテルの移動をすることも考えている。

もし、そのような宿泊方法が複数あるならば、ホテルの移動回数が最小になるような宿泊方法を出力せよ。ホテルの移動回数とは、x泊目(1 <= x < D)の宿泊ホテルとx+1泊目の宿泊ホテルが異なる場合にこれを1回の移動と考え、D泊分足し合わせた値である。

それでも1通りに定まらない場合は、辞書順で最も小さくなるような宿泊方法を出力すること。2つの宿泊ホテル番号の数列 A = {a1, a2, ..., aD} と B = {b1, b2, ..., bD} があったとき、AがBより辞書順で小さいとは、aiがbiと異なるような最初のiについて、aiがbiより小さいときのことを言う。

Input

各データセットは、以下の形式で入力される。

N D
p11 p12 ... p1D
p21 p22 ... p2D
...
pN1 pN2 ... pND

入力は、全て整数である。Nは宿泊候補のホテルの数、Dは宿泊日数である。pijは、ホテルiにおける、j泊目の宿泊費である。

Constraints

1 <= N <= 50

1 <= D <= 50

1 <= pij <= 10000

Output

各データセットに対して、以下の形式で出力せよ。

P M
stay1
stay2
...
stayD

PはD泊分の最小の宿泊費合計、Mは最小のホテル移動回数である。続いて、問題文に指定された条件で宿泊するホテルを決定し、D泊分のホテルの番号を出力せよ。stayi (1 <= stayi <= N)は、i泊目に宿泊するホテルが、ホテルstayiであることを意味する。

Sample Input 1

2 3
3000 6000 3000
4000 5500 4500

Output for the Sample Input 1

11500 2
1
2
1

最小の宿泊費合計は、11500円であり、この合計値を満たせるのは、
1泊目にホテル1に泊まり3000円、2泊目にホテル2に泊まり5500円、3泊目にホテル1に泊まり3000円の方法だけである。ここでは、1泊目と2泊目の間、2泊目と3泊目の間、の合計2回ホテルの移動を行っている。

Sample Input 2

3 4
5500 5500 5500 5500
5480 5780 5980 5980
5500 5500 5500 5500

Output for the Sample Input 2

21980 1
2
1
1
1

このサンプルの宿泊費合計の最小は21980円である。合計をこの価格にするための方法は何通りか存在するが、移動回数を最小にするならば、A = {2, 1, 1, 1}、B = {2, 3, 3, 3}の2通りにしぼられる。この2通りの内、辞書順で最小なものはAであるため、これを出力する。
Problem D: 2DはDecision Diagramの略

Problem Statement

BDD(Binary Decision Diagram)というデータ構造をご存知だろうか。近年、組み合わせ爆発お姉さんの動画関連でも話題になったZDDは、BDDが派生したデータ構造である。この問題は、BDDの基本的な実装を行うものである。

BDDとは、論理関数を表現する閉路のないグラフ(DAG)である。例えば、表1の真理値表を表わす論理関数は、図1のBDDとなる。BDDは、0エッジ(破線矢印)、1エッジ(実線矢印)、0終端ノード(0の四角)、1終端ノード(1の四角)、変数ノード(数字が書かれた丸)の5種類の部品からなる。0終端ノードと1終端ノードは、一番下にそれぞれ1つずつ存在する。各変数ノードからは、0エッジと1エッジ、それぞれが1つずつ出力されており、次のノードへとつながっている。各変数ノードは、ノードに書かれた番号の変数に対応しており、その変数の値が1ならば1エッジ側へ、0ならば0エッジ側へ辿る。そうして、一番上のノードから辿った結果、1終端ノードに行き着けば1が答え、0終端ノードに行き着けば0が答えとなる。例えば、表1の真理値表の「変数1=1, 変数2=0, 変数3=1」をBDDで辿ると、図1の太線のような辿り方となり、結果が1であることがわかる。この問題においては必ず、BDDの上側から1段ずつ、変数1、変数2、...、変数Nの順番に変数ノードが現れるものとする。

さて、この問題では、今説明した単純なBDDを、簡約化規則を利用して圧縮するプログラムを作成してもらう。簡約化規則とは、図2に示す2つの規則である。まず、図2(a)の規則は、変数ノードAがあったとき、「Aの0エッジの指す先＝Aの1エッジの指す先」であるときに適用される。この場合、変数の値が0であろうと1であろうと遷移する先が1通りであるため、この変数ノードは必要のないものであるとわかる。そのため、この条件に当てはまる変数ノードは全て削除することができる。図2(b)の規則は、2つの変数ノードA, Bがあったとき、「Aの変数番号＝Bの変数番号、かつAの0エッジの指す先＝Bの0エッジの指す先、かつAの1エッジの指す先＝Bの1エッジの指す先」であるときに適用される。この場合、二重に同じノードが存在していて無駄であることがわかるので、2つの変数ノードを1つの変数ノードとして共有することができる。

BDDの形が変わらなくなるまで簡約化規則を繰り返し用いると、図1のBDDは、図3(a)->(b)と変化していき、最終的に図3(c)のような、よりコンパクトなBDDへと変形する。もともと変数ノードが7個だったBDDが、変数ノード3個のBDDになったことがわかる。

論理関数を表わす真理値表が入力されるので、簡約化規則を適用後のBDDの変数ノード数を出力せよ。

Input

各データセットは、以下の形式で入力される。

N
bit_line

Nは、論理関数の変数の数を表わす。bit_lineは真理値表を表わす、'1'と'0'からなる、2^Nの長さの文字列である。各文字は、

1文字目のビット： 変数1=0, 変数2=0, ..., 変数N-1=0, 変数N=0のときの結果

2文字目のビット： 変数1=0, 変数2=0, ..., 変数N-1=0, 変数N=1のときの結果

3文字目のビット： 変数1=0, 変数2=0, ..., 変数N-1=1, 変数N=0のときの結果

4文字目のビット： 変数1=0, 変数2=0, ..., 変数N-1=1, 変数N=1のときの結果

...

2^N文字目のビット：変数1=1, 変数2=1, ..., 変数N-1=1, 変数N=1のときの結果

を表わしている。

Constraints

1 <= N <= 10

Output

簡約化規則適用後のBDDの変数ノード数を出力せよ。

Sample Input 1

3
01100110

Output for the Sample Input 1

3

Sample Input 2

2
0000

Output for the Sample Input 2

0

共有と削除を繰り返すと変数ノードはなくなる。

Sample Input 3

2
0110

Output for the Sample Input 3

3

簡約化規則を1回も適用することができない。

Sample Input 4

5
11110101011100110010111100010001

Output for the Sample Input 4

12
Problem E: 英語の勉強

Problem Statement

会津合宿に参加予定の高槻さんは勉強熱心で、最近は英語の勉強をがんばっている。彼女は、携帯を使って次のようなゲームをプレイすることで、少しでも多く英単語を覚えようとしている。彼女が持っている携帯は、指で画面を操作するタッチパネル式である。

携帯の画面には、4 * 4のマス目が描かれており、各マスにはアルファベット大文字が書かれている。このゲームは、制限時間T秒の間に、マス目の中に隠されている英単語をたくさん見つけ、発見できた英単語の種類により点数を競うものである。

1つの単語を見つける手順は、次のようになる。まず、単語の1文字目に対応する開始マスを決めて、そこに指を置く。そして、今指を置いているマス目から、上下左右・斜めの、隣接する8方向のマスのいずれかに向かって、指でなぞっていく。ただし、開始マスから現在のマスまですでに辿ったことがあるマスは、通ることができない。単語の終了マスに達したら、そこで指を離す。その瞬間、開始マスから終了マスまで指でなぞった単語1つの点数が加点される。x文字の単語1つをなぞるためには、x秒の時間がかかる。ある単語をなぞってから、次の単語をなぞるための指の移動時間は無視してよい。

入力では、加点対象となる単語の辞書も入力される。この辞書の各単語には、点数が振られている。辞書の中に書かれている単語を指でなぞると、その単語に対応する点数が加算される。ただし、開始マスから終了マスまで、全く同じ指のなぞり方をした単語は、最初の1回しか点数加算されない。辞書に書かれていない単語を指でなぞっても加点はされない。

辞書とゲームの盤面が与えられるので、制限時間内に得られる最大の点数を出力せよ。

Input

各データセットは、以下の形式で入力される。

N
word1 score1
word2 score2
...
wordN scoreN
line1
line2
line3
line4
T

Nは、辞書に含まれる単語の数を表わす整数である。続いてN行にわたって、辞書が入力される。wordiは1つの単語を表わすアルファベット大文字で構成される文字列、scoreiはwordiの単語を指でなぞったときに得られる点数を表わす整数である。辞書の中に、同じ単語が2回以上現れることはない。

続いて4行にわたって、各マス目の文字が入力される。lineiは、4文字のアルファベット大文字だけで構成される文字列である。lineiの左からj文字目は、i行目の左からj番目の文字に対応する。

一番最後に、制限時間を表わす整数Tが入力される。

Constraints

1 <= N <= 100

1 <= wordiの文字列長 <= 8

1 <= scorei <= 100

1 <= T <= 10000

Output

制限時間内に取得できる最高の点数を1行で出力せよ。

Sample Input 1

6
AIZU 10
LINER 6
LINE 4
ALL 2
AS 1
CIEL 10
ASLA
CILI
IRZN
ELEU
21

Output for the Sample Input 1

40

図1に操作例を示す。例えば、次のようになぞると40点となる。

"CIEL"は、文字列の長さが4であるため4秒かけて10点。

"AIZU"は、違うなぞり方をすれば、2つ発見できるため、8秒かけて20点。

"LINER"を5秒かけて6点。

"LINE"を4秒かけて4点。

合計21秒かけて、40点となる。
Problem F: 自転車

Problem Statement

菊地君は、大の自転車好きである。今日も彼は、お気に入りの自転車に乗ってサイクリングロードへと走り出そうとしている。

彼が住む地域には、N個の町が存在する。各町を町1、町2...、町Nと呼ぶこととする。彼が住む町は、町1である。この地域には、サイクリングを趣味としている人が多く、最近では頻繁に町と町を結ぶサイクリングロードが作られている。サイクリングロードを使うと、2つの町を双方向に移動できる。入力では、どの町とどの町が新しくサイクリングロードで繋がれたかが時系列順に入力される。

菊地君は、新しいサイクリングロードが1つ完成したときに、次に示す条件を満たすときだけサイクリングに出かける。まず、サイクリング中に同じ風景を何回も見るのはつまらないため、同じ町や同じサイクリングロードを2回以上通らないような道順である必要がある。サイクリングの終了時には家に帰るようにしたいため、スタート地点は町1で、ゴール地点は町1である必要がある。そして、完成した最新のサイクリングロード1つを必ず走らなければならない。また、全ての町やサイクリングロードを通る必要はない。

完成したサイクリングロードが時系列順に与えられるので、各サイクリングロードが完成した時点で、菊地君がサイクリングできるかどうかを答えよ。

Input

各データセットは、以下の形式で入力される。

N M
a1 b1
a2 b2
...
aM bM

入力値は、全て整数である。Nは町の数、Mは作られるサイクリングロードの数である。始め、どの町と町の間にもサイクリングロードは作られていない。aiとbiは、町aiと町biを繋ぐサイクリングロードが、i番目に完成することを表わしている。

Constraints

3 <= N <= 100

1 <= M <= N * (N - 1) / 2

1 <= ai, bi <= N

ai ≠ bi

同じ町間を繋ぐサイクリングロードは、2回以上現れない。

Output

M行にわたって、問題文に指定された条件で菊地君がサイクリングできるかどうかを答えよ。出力のi行目は、{(a1, b1), (a2, b2), ..., (ai, bi)}のサイクリングロードを使って、サイクリングできるかどうかを出力する。サイクリングできるならば"Yes"、できないならば"No"と出力せよ。

Sample Input 1

3 3
1 2
2 3
3 1

Output for the Sample Input 1

No
No
Yes

始めの2つのサイクリングロードだけでは、自分の町に戻ることができないためNoとなる。(3, 1)が追加されたときは、新しいサイクリングロード(3と1の道)を通りつつ、自分の町に戻ることができるためYesとなる。

Sample Input 2

4 4
1 2
2 3
2 4
3 4

Output for the Sample Input 2

No
No
No
No

どの段階においても、自分の町に戻るのに、同じ町・サイクリングロードを必ず2回以上通らなければならないため、全てNoである。
Problem G: 穴掘って埋まってます

Problem Statement

魔法使いの萩原さんは、非常にネガティブな性格である。彼女は、何か落ち込むようなことがあると、穴掘りの魔法を使って穴を作り、泣きながら埋まってしまう。穴掘りの魔法とは、次のようなものである。

彼女は、まずN本の線分を地面に描く。そして、彼女が呪文を唱えると、線で囲まれた範囲に穴が出来上がる。交差・内包の関係にある2つの穴は、1つの穴として数える。ただし、頂点のみで接している2つの穴は、別々の穴として数える。

図1と図2に、Sample Input 1と2の図を示す。まず、図1において、Aの三角形とBの三角形は、頂点のみで接しているため、別々の穴と数える。Bの三角形とCの三角形は、辺同士重なっているため、1つの穴として数える。よって、図1は、穴2つである。図2では、Dの四角形がEの四角形に包含されているため、これらは1つの穴と数える。Eは、右上の穴とも交差しているため、図2は、穴1つである。

あなたは、萩原さんの世話係であり、彼女が作った無数の穴を埋めなければならない。どれくらい穴を埋めないといけないのかを知るために、彼女が作った穴の数を求めるプログラムを作成せよ。

Input

各データセットは、以下の形式で入力される。

N
xa1 ya1 xb1 yb1
xa2 ya2 xb2 yb2
...
xaN yaN xbN ybN

入力は全て整数で表わされる。1行目は、線分の数である。続いてN行にわたって、線分の情報が与えられる。1つの線分は、線分の端点(xai, yai)と(xbi, ybi)によって表わされる。

Constraints

1 <= N <= 50

-1000 <= 座標 <= 1000

(xai, yai)と(xbi, ybi)の位置は異なる

2つの線分が交差しているとき、2つの線分の端点4つが一直線上に並ぶことはない

Output

穴の個数を1行で出力せよ。

Sample Input 1

8
5 0 5 10
5 10 0 5
0 5 5 0
10 0 10 10
10 10 5 5
5 5 10 0
10 2 15 5
15 5 10 8

Output for the Sample Input 1

2

Sample Input 2

11
0 0 10 0
10 0 10 10
10 10 0 10
0 10 0 0
1 2 9 2
8 1 8 9
9 8 1 8
2 9 2 1
8 11 11 8
8 11 14 10
11 8 10 14

Output for the Sample Input 2

1
Problem A: Register Phase

インターネットをより安全に活用するために、堅牢なパスワードを使うことは重要である。それと同時に、同じパスワードを使い回さないことも非常に重要である。どんなに強いパスワードを使っていても、一箇所で平文が流出してしまえば、破るのは非常に容易になってしまう。もちろん、全てのアプリケーションがパスワードをハッシュ化し、SALTを適切に使用していれば流出してもそのような被害は発生しないが、いまだにパスワードを平文で保存しているアプリケーションはあるのである。

さて、そろそろコンテストが始まる。チームのアカウントを登録しなくては…。

問題

パスワードを表す文字列が与えられる。その文字列が以下の条件を全て満たすか調べ、満たす場合は"VALID"と、ひとつでも満たさない項目がある場合は"INVALID"と出力せよ。

文字列長が6以上である

数字を一つ以上含んでいる

大文字英字を一つ以上含んでいる

小文字英字を一つ以上含んでいる

入力

パスワードを表す文字列が一行に与えられる。

出力

パスワードを表す文字列が問題の条件を全て満たすなら"VALID"と、満たさない条件があるなら"INVALID"と、一行に出力せよ。

制約

パスワードを表す文字列は1文字以上20文字以内である

パスワードを表す文字列は英大文字、英小文字、数字のみを含む

入出力例

入力1

password

出力1

INVALID

世界中で広く使われているパスワードである。

入力2

AizuCamp2013

出力2

VALID

素晴しいパスワードである。

入力3

1234

出力3

INVALID

暗証番号として広く使われている。

入力4

NaBiO3

出力4

VALID

ぎりぎり6文字以上である。
Problem B: Time Complexity

ICPC World Finals 1日目

プログラミングコンテストではプログラムの実行時間を把握する事が重要だ。
実行時間の見積もりを誤り、 時間制限をオーバーしてしまうコードを書いてしまうと、 そのぶん時間をロスしてしまう。
ICPCのようにコンピュータが1台しか使えないチーム戦ではなおさらである。

そこで、ICPC World
Finalsを前に控えたティー氏はプログラムの実行時間を暗算で求める訓練を始めることにした。
「logは定数のようなもの」なので、まずは多項式に取り組むとしよう。

問題

ある問題の答えを計算するプログラムと、それを実行するコンピュータがある。
問題の入力を表す正整数\(n\)、 入力\(n\)に応じてプログラム中で実行される命令の数を表す多項式\(f(n)\)、
コンピュータの1命令の実行時間\(T\)[ナノ秒]（=\( 10^{-9} \)[秒]）が与えられる。
多項式\(f(n)\)の回数だけ命令を実行した時のプログラムの総実行時間が1秒「以下」であるかを判定し、
1秒「以下」であるならば総実行時間を求めよ。

入力

n T
f(n)

1行目に 問題の入力を表す正整数\(n\)と 1命令の実行時間[ナノ秒]を表す整数\(T\)が空白区切りで与えられる。
2行目に実行される命令の数を表す多項式\(f(n)\)が与えられる。

多項式\( f(n) \)は以下のBNFで表される。

<poly> ::= <poly> "+" <mono> | <mono>
<mono> ::= "n^" <num>
<num> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

ここで各単項式n^kは、\(n\)の\(k\)乗を表す。

出力

プログラムの総実行時間が1秒「以下」である場合には総実行時間を[ナノ秒]単位で、1秒を「超過」する場合には"TLE"を1行に出力せよ。

制約

\( 1 \leq n \leq 10^{9}(= 1000000000) \)

\( 1 \leq T \leq 10^{9}(= 1000000000) \)

多項式\( f(n) \)の次数は0以上9以下、単項式の数は1以上10以下

入出力例

入力1

100 100
n^1+n^2+n^3

出力1

101010000

総実行時間は\( (100^{1} + 100^{2} + 100^{3}) \times 100 \)[ナノ秒]である。

入力2

1000 1
n^3+n^0

出力2

TLE

総実行時間は\( 1000^{3} + 1000^{0} = 10^{9}+1 \)[ナノ秒]であり、1[秒]を超えてしまう。

入力3

100000000 100000000
n^3

出力3

TLE

総実行時間は\( (10^{8})^{3} \times 10^{8} = 10^{32} \)[ナノ秒]である。
Problem C: Mysterious Operator

ケー氏がいつものように某SNSを閲覧していると、
「解ける人はIQ150以上ある」という問題がタイムラインに流れてきた。
ケー氏はIQが150以上あるので、見るまでもなくその問題を一瞬で解いてしまった。
彼にしてみれば、このような問題なぞに頭を働かせる必要は無い。 コンピュータに任せれば充分なのである。

問題

問題には以下のような謎の数式が書かれていた。

\( 5 + 3 = 28 \)

\( 9 + 1 = 810 \)

\(8 + 6 = 214 \)

\( 5 + 4 = 19 \)

\( 2 + 2 = 4 \)

\( 15 + 8 = 723 \)

\( 7 + 9 = -216 \)

\( 3 + 0 = 33 \)

上記の演算子\( + \)について考えた時、ある正整数\( a \)について\( x \geq 0, y \geq 0 \)かつ\( x + y = a \)になるような整数のペア\( x,y \)の個数を求めよ。

入力

正整数\(a\)が一行で与えられる。

出力

\( a = x + y, x \geq 0, y \geq 0\)を満たすペア\((x,y)\)の個数を一行に出力せよ。

制約

\( 1 \leq a \leq 10^9(= 1000000000) \)

入出力例

入力1

19

出力1

1

\( 5 + 4 \)の1通りである。

入力2

22

出力2

2

\( 11 + 11 \)と、\( 2 + 0 \)の2通りが存在する。

入力3

1

出力3

0

\( 1 + 0 = 11 , 0 + 1 = -11 \)である。\( 1 \)は生成することができない。

入力4

101

出力4

0

\( 1 - 0 \)は\( 101 \)ではないことに注意すること。

入力5

660233276

出力5

4