A - 得点

Time Limit: 10 sec / Memory Limit: 256 MB

配点: 100

問題

JOI 高校の 2 人の生徒 A さんと B さんは,情報,数学,理科,英語の 4 教科の試験を受けた.A さんと B さんのこれら 4 教科の得点が与えられると,A さんの合計点 S と Bさんの合計点 T のうち大きな方を出力するプログラムを作成せよ.ただし,同点の場合は S \ (= T) を出力せよ.


入力

入力は 2 行からなる.
1 行目は 4 つの整数が 1 つの空白を区切りとして書かれており,それぞれ順に,A さんの情報の得点,数学の得点,理科の得点,英語の得点を表している.
2 行目は 4 つの整数が 1 つの空白を区切りとして書かれており,それぞれ順に,B さんの情報の得点,数学の得点,理科の得点,英語の得点を表している.
どの教科の得点も 100 点満点で,負の得点が与えられることはない.

出力

出力は,求める 1 つの整数からなる.


入力例 1

100 80 70 60
80 70 80 90

出力例 1

320

入力例 2

100 80 70 60
80 70 60 100

出力例 2

310
B - 未提出者は誰だ

Time Limit: 10 sec / Memory Limit: 256 MB

配点: 100

問題

JOI 大学の M 教授はプログラミングの授業を担当している.クラスには 30 人の受講生がいて各受講生には 1 番から 30 番までの出席番号がふられている.この授業の課題を 28 人の学生が提出した.提出した 28 人の出席番号から提出していない 2 人の出席番号を求めるプログラムを作成せよ.


入力

入力は 28 行あり,各行には提出者の出席番号(1 以上 30 以下)が 1 つずつ書かれている.入力される出席番号に重複はないが,どのような順に入力されるかはわからない.

出力

出力は 2 行からなる.1 行目に 2 人の未提出者の出席番号のうち小さいほうを,2 行目に大きいほうを出力せよ.


入力例 1

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

出力例 1

2
8

入力例 2

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

出力例 2

2
8
C - シーザー暗号

Time Limit: 10 sec / Memory Limit: 256 MB

配点: 100

問題

ガイウス・ユリウス・カエサル(Gaius Julius Caesar),英語読みでジュリアス・シーザー(Julius Caesar)は,古代ローマの軍人であり政治家である.カエサルは,秘密の手紙を書くときに,AD に,BE に,CF に,というように 3 つずらして表記したという記録が残っている.

大文字のアルファベット 26 文字だけからなる文字列を,カエサルがしたように3文字ずつずらす変換を施し得られた文字列がある.このような文字列を元の文字列に戻すプログラムを作成せよ.

各文字の変換前と変換後の対応は次のようになる.
変換前 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
変換後 D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

例えば,この方法で文字列 JOI を変換すると MRL が得られ,この方法で変換された文字列 FURDWLD の元の文字列は CROATIA である.


入力

入力は 1 行だけからなり,その 1 行は大文字のアルファベットのみで構成される文字列を 1 つ含む.

入力される文字列の長さは 1\,000 以下である.

出力

出力は,入力された文字列を元に戻した文字列だけを含む 1 行からなる.


入力例 1

MRL

出力例 1

JOI

入力例 2

FURDWLD

出力例 2

CROATIA
D - カードの並び替え

Time Limit: 10 sec / Memory Limit: 256 MB

配点: 100

問題

1 から 2n の数が書かれた 2n 枚のカードがあり,上から 1, 2, 3, \ldots, 2n の順に積み重なっている.

このカードを,次の方法を何回か用いて並べ替える.

整数 k でカット

上から k 枚のカードの山 A と 残りのカードの山 B に分けた後,山 A の上に山 B をのせる.

card01.png

リフルシャッフル

上から n 枚の山 A と残りの山 B に分け,上から A の 1 枚目,B の 1 枚目,A の 2 枚目,B の 2 枚目,\ldots,A の n 枚目,B の n 枚目,となるようにして,1 つの山にする.

card02.png

入力の指示に従い,カードを並び替えたあとのカードの番号を,上から順番に出力するプログラムを作成せよ.


入力

  • 1 行目には n (1 \leqq n \leqq 100) が書かれている.すなわちカードの枚数は 2n 枚である.
  • 2 行目には操作の回数 m (1 \leqq m \leqq 1000) が書かれている.
  • 3 行目から m + 2 行目までの m 行には,0 から 2n - 1 までのいずれか 1 つの整数 k が書かれており,カードを並べ替える方法を順に指定している.
    • k = 0 の場合は,リフルシャッフルを行う.
    • 1 \leqq k \leqq 2n-1 の場合は,k でカットを行う.

出力

2n 行出力せよ.1 行目には並べ替え終了後の一番上のカードの番号,2 行目には並べ替え終了後の上から 2 番目のカードの番号というように,i 行目には上から i 番目のカードの番号を出力せよ.


入力例 1

2
2
1
0

出力例 1

2
4
3
1

入力例 2

3
4
2
4
0
0

出力例 2

1
5
4
3
2
6
E - 品質検査

Time Limit: 10 sec / Memory Limit: 256 MB

配点: 100

問題

あなたはある機械の製造工場で品質管理の責任者をしている.この機械には,部品として電源とモーターとケーブルが必要である.製造工場には電源が a 個,モーターが b 個,ケーブルが c 個あり,それぞれ 1 から a まで,a + 1 から a + b まで,a + b + 1 から a + b + c までの番号が付いている.困ったことに,部品の中に故障しているものがあるかもしれない.工場ではどの部品が故障していてどの部品が正常であるかを知りたい.

そこで,工場では次の方法で部品を検査した.電源とモーターとケーブルを 1 つずつ持ってきてつなぎ,動作させてみる.このとき,3 つの部品がすべて正常であるときは正しく動作して「合格」とわかる.3 つの中に故障している部品が 1 つでも入っているときは正しく動作しないので「不合格」とわかる.(工場で作っている機械はとても精密なので,故障した部品がまざっているのに偶然正しく動作してしまうなどということは起きないのだ.)

あなたには検査結果のリストが渡される.検査結果のリストの各行には,検査に使った電源とモーターとケーブルの番号と,検査が合格だったか不合格だったかが書かれている.

検査結果のリストが与えられたとき,すべての部品を,検査結果から確実に故障しているとわかる部品と,確実に正常とわかる部品と,検査結果からは故障しているとも正常であるとも決まらない部品に分類するプログラムを作成せよ.


入力

入力の形式は以下の通りである.

1 行目には 3 個の整数が空白区切りで書かれており,順に電源の個数 a, モーターの個数 b, ケーブルの個数 c を表す.
2 行目には 1 個の整数が書かれており,検査結果のリストに含まれる検査の回数 N が書かれている.
続く N 行は検査結果のリストを表す.各行には,4 個の整数 i, j, k, r1 つの空白を区切りとして書かれており,電源 i とモーター j とケーブル k をつないで検査した結果が,「合格」(r = 1 のとき) か「不合格」(r = 0 のとき) だったことを表す.

a, b, c, N1 \leqq a, b, c \leqq 1001 \leqq N \leqq 1000 を満たす.

出力

出力は以下の通りである. 出力は a + b + c 行からなる.

i 行目 (1 \leqq i \leqq a + b + c) :

検査結果から部品 i が故障しているとわかる場合は 0 を出力する.
検査結果から部品 i が正常とわかる場合は 1 を出力する.
検査結果から部品 i が故障しているか正常であるかが決まらない場合は 2 を出力する.


入力例 1

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

出力例 1

2
1
1
0
1
0
F - 通学経路

Time Limit: 10 sec / Memory Limit: 256 MB

配点: 100

問題

太郎君の住んでいる JOI 市は,南北方向にまっすぐに伸びる a 本の道路と,東西方向にまっすぐに伸びる b 本の道路により,碁盤の目の形に区分けされている.

南北方向の a 本の道路には,西から順に 1, 2, \ldots, a の番号が付けられている.また,東西方向の b 本の道路には,南から順に 1, 2, \ldots, b の番号が付けられている.西から i 番目の南北方向の道路と,南から j 番目の東西方向の道路が交わる交差点を (i, j) で表す.

太郎君は,交差点 (1, 1) の近くに住んでおり,交差点 (a, b) の近くの JOI 高校に自転車で通っている.自転車は道路に沿ってのみ移動することができる.太郎君は,通学時間を短くするため,東または北にのみ向かって移動して通学している.

現在,JOI 市では,n 個の交差点 (x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n) で工事を行っている.太郎君は工事中の交差点を通ることができない.

太郎君が交差点 (1, 1) から交差点 (a, b) まで,工事中の交差点を避けながら,東または北にのみ向かって移動して通学する方法は何通りあるだろうか.太郎君の通学経路の個数 m を求めるプログラムを作成せよ.


入力

入力の 1 行目には,空白を区切りとして 2 個の整数 a, b が書かれている.これは,南北方向の道路の本数と,東西方向の道路の本数を表す.a, b1 \leqq a, b \leqq 16 をみたす.

2 行目には, 工事中の交差点の個数を表す整数 n が書かれている.n1 \leqq n \leqq 40 をみたす.

続く n 行 (3 行目から n + 2 行目) には,工事中の交差点の位置が書かれている.i + 2 行目には空白で区切られた整数 x_i, y_i が書かれており,交差点 (x_i, y_i) が工事中であることを表す.x_i, y_i1 \leqq x_i, y_i \leqq 16 をみたす.

出力

出力は,太郎君の通学経路の個数 m だけを含む 1 行からなる.


入力例 1

5 4
3
2 2
2 3
4 2

出力例 1

5

下図は a = 5, b = 4, n = 3 で,工事中の交差点が (2, 2), (2, 3), (4, 2) の場合を表している.

route-fig1.png

この場合,通学経路は m = 5 通りある.5 通りの通学経路を全て図示すると,以下の通り.

route-fig2.png