▶ 問題番号 [01]水道料金を節約しよう

配 点 : ４

問 題
P あいづ学園都市に住んでいる松平さんは、普段からエコに気を付けて生活をしています。先月の水道料金が 4280 円となり、いつも目標としている 4000 円を超えてしまったので、今月は節水に努めてきました。先月と比べて水道料金はどのくらい節約になったのでしょうか。
今月の使用水量 w(㎥)を入力とし、先月の水道料金である 4280 円と比較して、どのくらい水道料金を節約できたかを出力するプログラムを作成してください。ただし、w は 0 以上 100 以下の整数とします。
なお、水道料金は次のように計算されます。
（水道料金）＝（基本料金）＋（水量による料金）
水量による料金は下表のように使用量に応じて計算されます。
段階

水量料金

第 1 段階料金

10 ㎥まで基本料金 1150 円

第 2 段階料金

10 ㎥超過 20 ㎥まで

1 ㎥あたり 125 円

第 3 段階料金

20 ㎥超過 30 ㎥まで

1 ㎥あたり 140 円

第 4 段階料金

30 ㎥超過分

1 ㎥あたり 160 円

例えば、使用水量 40 ㎥の場合。
基本料金 1150 円(第 1 段階)＋10 ㎥×125 円（第 2 段階）＋10 ㎥×140 円(第 3 段階)＋10 ㎥×160 円(第 4 段階)＝5400 円となります。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりは-1ひとつの行で示されます。
各データセットは以下のとおりです。
1 行目 今月の使用水量 w（整数）

出 力
入力データセットごとに、先月の水道料金との差を出力します。

出力例

入力例
29400-1620-11203130

▶ 問題番号 [02]

病院でウォーキング

配 点 : ４

問 題
P 会津リバーサイドホスピタルでは、リハビリと健康増進のため、入院患者が一日二回のウォーキングを行っています。元気に退院するために、ウォーキングで体力を回復しようと頑張る人が日に日に増えていきました。健康になるにつれ、気持ちも明るく笑顔も見られるようになったことから、院長先生が、「一日で一番長い距離を歩いた人にプレゼントをあげよう！」という企画を立ち上げました。
患者の数 n、それぞれの患者の番号 p、一回目に歩いた距離 d1、二回目に歩いた距離 d2 を入力とし、歩いた距離の合計が最も長い患者の番号とその距離を出力するプログラムを作成してください。ただし、一日に歩いた距離が同じ患者は無いものとし、n、p は 1 以上 10000 以下の整数、d1、d2 は 0 以
上 5000 以下の整数とします。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下のとおりです。
1 行目 患者の数 n（整数）2 行目 第 1 の患者の情報 p d1 d2（整数 整数 整数；半角空白区切り）
3 行目 第 2 の患者の情報：
n+1 行目 第 n の患者の情報

出 力
入力データセットごとに、最も長い合計距離を歩いた患者の番号とその歩いた距離を出力します。

出力例

入力例
5263 2345 2504
1 3210 1985
5000 1501 4132
10000 503 3107
51 1758 2690
3345 5000 2396
7 3910 1590
6789 2525 3616
05000 5633
345 7396▶ 問題番号 [03]

塾のクラス分け

配 点 : ４

問 題
P 会津進学塾では、生徒が塾に入る際に実力テストを行ってクラス分けをします。テストは数学、英語、国語の 3 科目行い、生徒を A,B,C クラスにクラス分けします。A クラスのレベルが一番高く、順に低くなっていきます。
クラス分けの判断は以下の表に基づきます。
条件

クラス

100 点の科目がある

A

数学と英語の平均点が 90 点以上

A

3 科目の平均点が 80 点以上

A

3 科目の平均点が 70 点以上

B

3 科目の平均点が 50 点以上で数学か英語が 80 点以上

B上の条件を満たさない

C

複数の条件を満たす場合は、よりレベルの高いクラスに分けられます。
生徒の人数 n、各生徒の数学の点数 pm、英語の点数 pe、国語の点数 pj を入力とし、各生徒のクラスA,B,C（半角英字）を出力するプログラムを作成してください。ただし、n は 1 以上 10,000 以下、pm、pe、pj は 0 以上 100 以下の整数とします。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下のとおりです。
1 行目 生徒の人数 n
2 行目 第 1 の生徒の点数

pm pe pj（整数 整数 整数；半角空白区切り）

3 行目 第 2 の生徒の点数：
n+1 行目 第 n の生徒の点数

出 力
入力データセットごとに、各生徒のクラスを出力します。

出力例

入力例
4100 70 2098 86 55
80 34 3665 79 65
299 81 2066 72 900AABCAB▶ 問題番号 [04]

人気のアイスクリーム店

配 点 : ４

問 題
P テンアイスクリームという名前のアイスクリーム屋さんがあります。
このお店では常に 10 種類のアイスクリームが店頭に並ぶようにしています。お店の店長は商品開発の参考にするために、アイスクリームの売れ具合を表すグラフを毎日作成しています。
そんな店長のために、あなたは各アイスクリームの販売数を表示するプログラムを作成することになりました。
一日に販売されるアイスクリームの総数 n と売れたアイスクリームの番号を入力とし、アイスクリームの種類ごとに販売した数だけ*（半角アスタリスク）を出力するプログラムを作成してください。
ただし、アイスクリームの種類は 0 から 9 までの整数で表わされ、n は 1 以上 10,000 以下の整数とします。また、販売個数がゼロのアイスクリームは、-（半角ハイフン）をひとつ出力します。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下のとおりです。
1 行目 一日に販売されるアイスクリームの総数 n（整数）2 行目 第 1 のアイスクリームの種類（整数）
3 行目 第 2 のアイスクリームの種類：
n+1 行目 第 n のアイスクリームの種類

出 力
入力データセットごとに、各アイスクリームの種類の番号順に販売数を出力します。

入力例
1526701987389482239150***************
*
*
*

出力例

▶ 問題番号 [05]

博士の愛した 2 進数

配 点 : ８

問 題
「君の靴のサイズはいくつかね」
初対面の私に、いきなり博士は尋ねました。
「 23.5 です」「ほお、実にきりのいい数字だ。２の４乗に２の２乗と２の１乗と２の０乗と２の -1 乗を加えた数だ」
続けて博士は尋ねました。
「君、身長はいくつかね」「はい、158.1 です」
博士は腕組みをして目を閉じました。しばらくの沈黙の後、口を開きました。
「ナァ～」
その後一緒に過ごした時間の中で、博士の行動がだんだん理解できるようになりました。
まず、私が博士の求めに応じて実数を言います。実数が整数部８桁以内で小数部４桁以内の２進数で表される場合、博士は２進数への変換結果を満足げに語ります。そうでない場合、悲しげに「ナァ～」と鳴きます。これは、私が負の実数を言うまで繰り返されるのです。
さて、博士は年齢とともにだんだんに長い計算が難しくなってきました。そこで、みなさんが博士に代わって、実数を入力し２進数に変換・出力するプログラムを作ってあげてください。ただし、２進表現が制限桁数（整数部８桁以内＋小数部４桁以内）に収まらない場合は、NA （半角英字）を出力してください。入力される実数は整数部８桁以内、小数部４桁以内に収まるものとし、出力する

P

２進表現は整数部８桁、小数部４桁で出力してください。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりは負の実数ひとつの行で示されます。各データセットは以下のとおりです。
１行目

n（実数）

出 力
入力データセットごとに２進数への変換結果を出力します。

出力例

入力例
23.5
158.1
-1.0

00010111.1000
NA▶ 問題番号 [06]FizzBuzz

配 点 : ８

問 題
P「Fizz Buzz」と言われる数字を使ったゲームがあります。このゲームは複数のプレイヤーで数字を1 から順にひとつずつ数え上げていくもので、各プレイヤーは直前のプレイヤーが発言した次の数字をひとつだけ発言します。その時、3 で割り切れる場合は 「Fizz」、5 で割り切れる場合は 「Buzz」、両者で割り切れる場合は「FizzBuzz」と数の代わりに発言しなければなりません。
このゲームでは、最初の 16 までの発言は以下のようになります。
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16,・・・

太郎君は友達とこの「Fizz Buzz」をして遊ぶことにしました。太郎君たちはルールを次のようにしました。「間違えた人は脱落する。その次の人は間違えた数の次の数から始める。つまり、1, 2, 3 と発言した場合、3 で間違えたので次は 4 から始めることになる。」このルールに従ってゲームを行うのですが、このゲームに慣れていないため、間違えたことに気付かないことがあり、公平な判断ができません。そこであなたは太郎君たちがこのゲームを楽しめるように、決められた発言回数が終わった時点で残っていた人を出力するプログラムを作成することになりました。
プレイヤー数 m、ゲーム中に発言された回数 n とそれぞれの発言 s を入力とし、入力が終わった時点で残っているプレイヤーの番号を小さい順に出力するプログラムを作成してください。ただし、プレイヤーには 1 から番号が割り振られており、発言順番も 1 番目のプレイヤーから順に行い、一通り発言が終わると、再度 1 番目のプレイヤーから発言することとします。順番の回ってきたプレイヤーが既に脱落している場合は、その次のプレイヤーが発言します。また、入力が終わった時点では必ずプレイヤーの誰かが残っているものとします。さらに、m は 2 以上 1000 以下の整数、n は 1 以上 10000 以下の整数とし、s は数字、Fizz、Buzz、FizzBuzz のいずれかです。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロふたつの行で示されます。
各データセットは以下のとおりです。
1 行目 プレイヤー数 m 発言回数 n (整数 整数；半角空白区切り)
2 行目 第 1 の発言 s1 (半角英数字)
3 行目 第 2 の発言 s2 (半角英数字)：
n+1 行目 第 n の発言 sn (半角英数字)

出 力
入力データセットごとに、指定された発言回数まで入力されたときに残っているプレイヤーの番号を小さい順に出力します。

出力例

入力例
5 7
12Fizz4Buzz
673 5123450 02 3 4 51▶ 問題番号 [07]四つ子素数

配 点 : １７

問 題
P (a, a+2, a+6, a+8)のように並んだ４つの素数の組を四つ子素数といいます。四つ子素数を構成する四つの素数のうち、最大の数をその四つ子素数の大きさと呼びます。例えば、最も小さい大きさの四つ子素数は、(5,7,11,13)の組であり、その大きさは 13 です。次に大きい四つ子素数は、(11, 13, 17, 19)の組で、その大きさは 19 です。
整数 n を入力とし、大きさが n 以下になるような四つ子素数のうち、最大となるものの大きさを出力するプログラムを作成してください。ただし、n は 13 以上 10,000,000 以下の整数とします。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下のとおりです。
1行目n（整数）

出 力
入力データセットごとに、最大となる四つ子素数の大きさを出力します。

出力例

入力例
131415161718192010000
013131313131319199439

▶ 問題番号 [08]迷子の双子

配 点 : １７

問 題
P

たかゆき君とかずゆき君は仲良しの双子ですが、行動が真逆です。
例えば、たかゆき君が西に行けば、かずゆき君は東へ行き、かずゆき君が北へ行けば、たかゆき君は南へ行きます。
現在 2 人はデパートに来ており、別々の場所にいます。
真逆に移動してしまう 2 人ができるだけ早く出会うためにはどうしたらよいでしょうか？
デパートは横 x 個×縦 y 個のマスで構成されるグリッドで表され、2 人は単位時間に東西南北に1 マス分移動することができます。ただし、グリッドの範囲外や障害物のあるマスに移動することはできません。
グリッドのマスの位置は座標（x、y）で表されます。

N

グリッドの情報と 2 人の初期位置を入力とし、2 人が出会うまでの最短の時間を出力するプログラ
ムを作成してください。出会うことができない場合や、出会うのに 100 以上の時間を要する場合は、NA と出力してください。グリッドの情報は、Y 行 X 列の数字、2 人の位置情報は座標によって与えられます。ただし、X、Y は 1 以上 50 以下の整数とします。
移動後にたかゆき君かかずゆき君のうち、どちらか一方が障害物やグリッドの範囲外に位置してしまうときには、移動ができないので、障害物やグリッドの範囲外に位置する方は元の場所に戻ります
が、そうでない方は元の場所に戻ることなく動くことができます。
なお、2 人が出会うとは、移動後に 2 人が同じマスに止まることを言います。2 人がすれ違っても、出会ったことにはなりません。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロふたつの行で示されます。
各データセットは以下のとおりです。
1 行目 デパートの大きさ X Y（整数 整数 ; 半角空白区切り）
2 行目 たかゆき君の初期位置 tx ty（整数 整数 ; 半角空白区切り）
3 行目 かずゆき君の初期位置 kx ky（整数 整数 ; 半角空白区切り）
4 行目 デパートの 1 行目の情報 d1 d2 … dX（0 か 1 ； 半角空白区切り）
各数字の意味は以下の通りです。
0:移動可能なマス
1:障害物があるマス
5 行目 デパートの 2 行目の情報：
Y+3 行目 デパートの Y 行目の情報

出 力
入力データセットごとに、最短の時間を出力します。

出力例

入力例
6 62 46 20 0 0 0 1 00 1 0 0 0 00 1 0 0 0 00 0 0 1 0 00 0 0 0 0 10 0 0 0 0 0
3 31 13 30 0 00 1 00 0 00 03NA▶ 問題番号 [09]自転車でダイエット

配 点 : １７

問 題P

A さんは甘いものが大好きですが、最近は奥さんからダイエットするように言われています。
ある日、A さんが自宅から市役所に出かけるとき、奥さんは自転車で行くことを勧めました。そこで
A さんはしぶしぶ自転車に乗って出かけましたが、甘い物の好きな A さんは、途中にあるケーキ屋さんに立ち寄りケーキの食べ歩きをしようと思いつきました。
自転車をこげば走行距離に応じてカロリーが消費されますが、ケーキを食べればその分カロリーが摂取されます。正味の消費カロリーは、自転車をこいで消費したカロリーからケーキを食べて摂取したカロリーを引いた値になります。したがって、正味の消費カロリーが 0 より小さくなることもあります。
ケーキ屋さんでケーキを買ったら、A さんはその場でケーキを全部食べてしまいます。A さんがすべてのケーキ屋さんに立ち寄るとは限りませんが、ケーキ屋さんが存在する地点を通るときには、必ず立ち寄ってケーキを 1 つ買って食べるものとします。ただし、同じケーキ屋さんの前を何度も通るのはさすがに気がひけるので、各ケーキ屋さんに訪れられるのは 1 回だけとします。また、目的地の市役所をいったん通り過ぎてからケーキ屋さんに立ち寄り、その後で市役所に戻って用を済ませてもよいものとし、ケーキ屋以外は何度訪れても良いものとします。
A さんの自宅から市役所までの地図情報と、その途中にあるケーキ屋さんで食べられるケーキのカロリーの一覧、単位距離の走行による消費カロリーを入力とし、自宅を出発してから市役所に入るまでの正味の消費カロリーの最小値を出力するプログラムを作成してください。
地図には、A さんの自宅と市役所、ケーキ屋さんとランドマーク(目印)になる建物が書かれています。地図を表す入力データは、A さんの自宅、市役所、ケーキ屋さんとランドマークの各地点の間をつなぐ道があるとき、2 つの地点を表す記号とその間の距離からなる行を含みます。たとえば、5 番目のケーキ屋さんと 3 番目のランドマークの間の距離が 10 なら、入力データは以下のような行を含みます。
C5 L3 10
このようにケーキ屋さんには C、ランドマークには L を番号の前につけて表します。また、A さんの自宅は H、市役所は D で表します。入力データに 2 つの地点とその間の距離が与えられているなら、2 地点の間をどちら向きにも進めます。たとえば、上の例ではケーキ屋さんからランドマークへも、その逆向きへも進むことができます。また、自宅から市役所までは必ずたどり着けるものとします。
それ以外に与えられる入力データは、ケーキ屋さんの数 m、ランドマークの数 n、単位距離あたりの消費カロリーk、1 番目のケーキ屋さんから m 番目のケーキ屋さんまでのそれぞれで買えるケーキのカロリーを表す m 個のデータ、距離のデータの総数 d です。m は 1 から 6 までの整数、n は 1 から 100 までの整数、k は 1 から 5 までの整数、d は 5 から 256 までの整数、2 地点間の距離は 1 から 20 までの整数です。また、ケーキ屋さんで買えるケーキのカロリーは 1 から 100 までの整数とします。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりは四つの０の行で示されます。
各データセットは以下のとおりです。
1 行目 ケーキ屋さんの数 m ランドマークの数 n 単位距離あたりの消費カロリー k
距離のデータの総数 d（整数 整数 整数 整数; 半角空白区切り）
2 行目 各ケーキ屋で買うケーキのカロリー（m 個の整数; 半角空白区切り）
3 行目 2 つの地点間の距離データ 1（文字列 文字列 整数; 半角空白区切り）：
d+2 行目 2 つの地点間の距離データ d（文字列 文字列 整数; 半角空白区切り）

出 力
入力データセットごとに、全体の消費カロリーの最小値を出力します。

出力例

入力例
1 1 2 535
H L1 5
C1 D 6C1 H 12
L1 D 10C1 L1 20
2 1 4 6100 70
H L1 5C1 L1 12
C1 D 11
C2 L1 7
C2 D 15
L1 D 80 0 0 01-2▶ 問題番号 [10]

こぶたぬきつねこ

配 点 : １７問 題
Ａ子さんの家に親戚のＢ男君がやってきました。彼は３歳で歌が大好きです。彼は幼稚園でならった「こぶたぬきつねこ」(山本直純作詞・作曲)という歌を一生懸命に歌っています。この歌では、４つのPことば「こぶた」「たぬき」「きつね」「ねこ」が順にしりとりになっていて、さらに最後の音と最初の音が同じになっています。Ｂ男君は、Ａ子さんに、同じようなしりとりが、Ｂ男君が言った単語から作れるか教えて欲しいと言われました。
そこで、Ａ子さんを助けるために、与えられた単語から、その単語をすべて使って、順にしりとりをつくり、その上で、第 1 の単語の最初の文字と最終の単語の最後の文字が同じであるようにできるか否かを判定するプログラムを作成しましょう。
n 個の単語を入力とし、その単語の組からしりとりを作成できるか否かを判定し、可能な場合はOK と、不可能な場合は NG と出力するプログラムを作成してください。ただし、n は 2 以上 10000 以下の整数とし、単語は 32 文字以下の小文字のアルファベット(a～z)だけからなるとします。

入 力
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下のとおりです。
1 行目 単語の個数 n（整数）2 行目 第 1 の単語（32 文字以下の半角アルファベットだけからなる文字列）
3 行目 第 2 の単語：
n+1 行目 第 n の単語

出 力
入力データセットごとに、判定結果を出力します。

出力例

入力例
5
apple
yellowgeorgia
king
email
7
apple
yellowgeorgia
king
email
wink
lucky
0NGOK