Time Limit: 10 sec / Memory Limit: 256 MB
配点: 100 点
問題
太郎君は 10 冊の本を購入した.後日,レシートをもとに価格を調べようとしたが,レシートには汚れがあり,ある本の価格が読み取れなかった.その本の価格を,10 冊の総額と他の 9 冊の価格から計算することにした.
価格が読み取れなかった本の価格を出力するプログラムを書け.なお,本の価格はすべて正の整数である.また,消費税を考慮する必要はない.
入力
入力は 10 行からなり,1 行に 1 つずつ正の整数が書かれている.1 行目の整数は 10 冊の総額を,2 行目から 10 行目の整数は読み取れた価格を表している.なお,10 冊の総額は 10\,000 以下である.
出力
出力は,価格が読み取れなかった本の価格のみを含む 1 行からなる.
入力例 1
9850 1050 800 420 380 600 820 2400 1800 980
出力例 1
600
Time Limit: 10 sec / Memory Limit: 256 MB
配点: 100 点
問題
JOI さんは一人ですごろく遊びをしている.このすごろくには一直線上に N 個のマスがあり,それぞれ移動の指示が書かれている.スタート地点は 1 マス目であり,ゴールは N マス目である.JOI さんはゴールするまで次を繰り返す.
サイコロを振って出た目の数だけ現在のマスから進み,そのマスの指示に従う.指示に従って移動した先のマスの指示には従わない.
ちょうど N マス目に止まる時だけでなく,移動先が N マス目を超える場合もゴールとなる.
すごろくの盤面と,M 回分のサイコロの出る目が与えられたとき,サイコロを何回振ったところでゴールするかを出力するプログラムを作成せよ.
入力
入力は 1 + N + M 行からなる.
入力の 1 行目には 2 つの整数 N,M (2 \leqq N \leqq 1\,000,1 \leqq M \leqq 1\,000) が空白を区切りとして書かれている.N はすごろくのマス目の個数を,M は与えられるサイコロの目の個数を表す.
続く N 行には -999 以上 999 以下の整数が1つずつ書かれている.1+i 行目 (1 \leqq i \leqq N) の整数は,すごろくの i 番目のマスの指示を表す.書かれている整数を X とする.X = 0 のときは「何もしない」を,X > 0 のときは「X マス進む」を,X<0 のときは「|X| マス戻る」の指示を表す.ただし,|X| は X の絶対値を表す.
続く M 行には 1 以上 6 以下の整数が 1 つずつ書かれており,1 + N + j 行目 (1 \leqq j \leqq M) の数は j 回目に出るサイコロの目を表す.
ただし,2 行目と 1 + N 行目の数は必ず 0 である.1 マス目よりも前のマスに移動させる指示が書かれているマスはない.また,どの採点用入力データにおいてもサイコロを振る回数が M 以下でゴールできる.
出力
出力は,サイコロを何回振ったところでゴールするかを表す整数のみを含む 1 行からなる.
入力例 1
10 5 0 0 5 6 -3 8 1 8 -4 0 1 3 5 1 5
出力例 1
5
入力例 2
10 10 0 -1 -1 4 4 -5 0 1 -6 0 1 5 2 4 6 5 5 4 1 6
出力例 2
6
Time Limit: 10 sec / Memory Limit: 256 MB
配点: 100 点
問題
あなたはクリスマスパーティーに学校内の自分の友達と,自分の友達の友達を招待することにした.あなたの通う学校の生徒数は n 人であり,それぞれの生徒には 1 から n までの番号が割り振られている.あなたの番号は 1 である.あなたの手元には,誰と誰が友達であるかを記したリストがある.このリストをもとに,あなたがクリスマスパーティーに招待する生徒数を求めるプログラムを作成せよ.
入力
入力の 1 行目には学校の生徒数 n (2 \leqq n \leqq 500) が,2 行目にはリストの長さ m (1 \leqq m \leqq 10\,000) が書かれている.入力は全部で 2 + m 行からなる.2 + i 行目 (1 \leqq i \leqq m) には 2 つの整数 a_i と b_i (1 \leqq a_i < b_i \leqq n) が空白区切りで書かれており,番号 a_i と番号 b_i の生徒が友達同士であることを表す.入力の 3 行目から 2 + m 行目には同じ友達関係を表す行が重複して現れることはない.
出力
出力は,あなたがクリスマスパーティーに招待する生徒数のみを含む 1 行からなる.
入力例 1
6 5 1 2 1 3 3 4 2 3 4 5
出力例 1
3
入力例 1 において,あなたの友達は番号 2 と番号 3 の生徒の 2 人である.また,番号 3 と番号 4 の生徒は友達同士であるので,番号 4 の生徒はあなたの友達の友達である.番号 5 と番号 6 の生徒はあなたの友達でもなく,あなたの友達の友達でもない.したがって,あなたは番号 2, 3, 4 の 3 人の生徒をクリスマスパーティーに招待する.
入力例 2
6 5 2 3 3 4 4 5 5 6 2 5
出力例 2
0
入力例 2 において,あなたには友達はいない.したがって,あなたがクリスマスパーティーに招待する生徒数は 0 人である.
Time Limit: 10 sec / Memory Limit: 256 MB
配点: 100 点
問題
花子さんは n 枚 (4 \leqq n \leqq 10) のカードを並べて遊んでいる.それぞれのカードには 1 以上 99 以下の整数が 1 つずつ書かれている.花子さんは,これらのカードの中から k 枚 (2 \leqq k \leqq 4) を選び,横一列に並べて整数を作ることにした.花子さんは全部で何種類の整数を作ることができるだろうか.
例えば,1, 2, 3, 13, 21 の 5 枚のカードが与えられ,そこから 3 枚を選び整数を作ることを考える.2, 1, 13 をこの順に並べると,整数 2113 を作ることができる.また,21, 1, 3 をこの順に並べても,同じ整数 2\,113 を作ることができる.このように,異なるカードの組み合わせから同じ整数が作られることもある.
n 枚のカードに書かれた整数が与えられたとき,その中から k 枚を選び,横一列に並べることで作ることができる整数の個数を求めるプログラムを作成せよ.
入力
入力は 2+n 行からなる.1 行目にはカードの枚数 n (4 \leqq n \leqq 10) が,2 行目にはカードを選ぶ枚数 k (2 \leqq k \leqq 4) が書かれている.2+i 行目 (1 \leqq i \leqq n) には i 枚目のカードに書かれている 1 以上 99 以下の整数が書かれている.
出力
出力は,花子さんが作ることができる整数の個数のみを含む 1 行からなる.
入力例 1
4 2 1 2 12 1
出力例 1
7
入力例 1 において,1, 2, 12, 1 の 4 枚のカードの中から 2 枚を選び,横一列に並べて作ることができる整数は,11, 12, 21, 112, 121, 122, 212 の 7 個である.
入力例 2
6 3 72 2 12 7 2 1
出力例 2
68
Time Limit: 10 sec / Memory Limit: 256 MB
配点: 100 点
問題
JOI さんが住むカナダのある都市は,南北方向にまっすぐに伸びる w 本の道路と,東西方向にまっすぐに伸びる h 本の道路により,碁盤の目の形に区分けされている.
南北方向の w 本の道路には,西から順に 1, 2, \ldots, w の番号が付けられている.また,東西方向の h 本の道路には,南から順に 1, 2, \ldots, h の番号が付けられている.西から i 番目の南北方向の道路と,南から j 番目の東西方向の道路が交わる交差点を (i, j) で表す.
JOI さんは,交差点 (1, 1) の近くに住んでおり,交差点 (w, h) の近くの会社に車で通っている.車は道路に沿ってのみ移動することができる.JOI さんは,通勤時間を短くするため,東または北にのみ向かって移動して通勤している.また,この都市では,交通事故を減らすために,次のような交通規則が設けられている:
- 交差点を曲がった車は,その直後の交差点で曲がることは出来ない.
すなわち,交差点で曲がったあとに 1 ブロックだけ進んで再び曲がることは許されない.このとき,JOI さんの通勤経路は何通り考えられるだろうか.
w と h が与えられたとき,JOI さんの通勤経路の個数を 100\,000 で割った余りを出力するプログラムを作成せよ.
入力
入力は 1 行からなり,空白を区切りとして 2 個の整数 w, h (2 \leqq w \leqq 100,2 \leqq h \leqq 100) が書かれている.w は南北方向の道路の本数,h は東西方向の道路の本数を表す.
出力
出力は,JOI さんの通勤経路の個数を 100\,000 で割った余りだけを含む 1 行からなる.
入力例 1
3 4
出力例 1
5
入力例 1 において,JOIさんの通勤経路は図のように 5 通り考えられる.したがって,5 を出力する.
入力例 2
15 15
出力例 2
43688
入力例 2 において,JOIさんの通勤経路は 143\,688 通り考えられる.したがって,143\,688 を 100\,000 で割った余りである 43\,688 を出力する.
Time Limit: 10 sec / Memory Limit: 256 MB
配点: 100 点
問題
今年も JOI 町にサンタクロースが空からやってきた.JOI 町にある全ての家には子供がいるので,このサンタクロースは JOI 町の全ての家にプレゼントを配ってまわらなければならない.しかし,今年は連れているトナカイが少々方向音痴であり,また建物の上以外に降りることができないため,全ての家にプレゼントを配るためには少々道順を工夫しなければならないようだ.
JOI 町は東西南北に区画整理されており,各区画は家,教会,空き地のいずれかである.JOI 町には 1 つだけ教会がある.次のルールに従い,サンタクロースとトナカイは教会から出発し,全ての家に 1 回ずつプレゼントを配った後,教会に戻る.
- 今年のトナカイは少々方向音痴であるため,東西南北いずれかの方向にまっすぐ飛ぶことしかできず,空中では方向転換できない.
- まだプレゼントを配っていない家の上は自由に通過できる.まだプレゼントを配っていない家には降りることができる.家に降りた時は必ずプレゼントを配り,その後は東西南北いずれかの方向に飛び立つ.
- JOI 町の家では,クリスマスの夜はサンタクロースが来るまでは暖炉をつけずに過ごしているが,サンタクロースが飛び立った後は暖炉をつける.暖炉をつけると煙突から煙が出るので,プレゼントを配り終えた家の上を通過することはできない.
- 教会の上は自由に通過することができる.しかし,教会では礼拝が行われているので,全てのプレゼントを配り終えるまで教会に降りることはできない.
- 空き地の上は自由に通過することができるが,空き地に降りることはできない.
入力として町の構造が与えられたとき,サンタクロースとトナカイがプレゼントを配る道順が何通りあるかを求めるプログラムを作成せよ.
入力
入力は n + 1 行ある.1 行目には整数 m (1 \leqq m \leqq 10) と整数 n (1 \leqq n \leqq 10) が空白で区切られて書かれている.2 行目から n + 1 行目までの各行には,0, 1, 2 のいずれかが,空白で区切られて m 個書かれており,各々が各区画の状態を表している.北から i 番目,西から j 番目の区画を (i,j) と記述することにすると (1 \leqq i \leqq n,1 \leqq j \leqq m) ,第 i + 1 行目の j 番目の値は,区画 (i, j) が空き地である場合は 0 となり,家である場合は 1 となり,教会である場合は 2 となる.教会の個数は 1 であり,家の個数は 1 以上 23 以下である.ただし,採点用入力データでは配る道順が 2\,000\,000 通りをこえることはない.
出力
出力はプレゼントを配る道順が何通りあるかを表す整数のみを含む 1 行からなる.
入力例 1
3 2 1 0 1 1 0 2
出力例 1
2
入力例 2
3 3 1 1 1 1 0 1 1 1 2
出力例 2
6
入力例 2 に対する 6 通り全ての道順(数字は配る順序を表す)