第3問次の文章を読み,後の問い(問1〜3)に答えよ。(配点 25)
Kさんの町の盆踊り大会では,参加者は入口で名前を確かめてもらい,うちわを受け取ってから会場に入る。この受付は二つのゲート(ゲート1とゲート2)で行い,一つのゲートでは一度に一人ずつ受付をする。実行委員のKさんは,昨年は受付の前に長い列ができたと聞き,昨年の記録をもとに待ち時間を調べることにした。
問1次の文章を読み,空欄ア〜エに当てはまる数字をマークせよ。また,空欄オに入れるのに最も適当なものを,後の解答群のうちから一つ選べ。
時刻は,受付を始めた時点からの経過時間(分)で表す。参加者には到着した順に番号を付ける。Kさんは,各参加者の受付をどのゲートで,いつ行うかを,次の規則1・規則2で決めることにした。
規則1:各ゲートで直前の人の受付が終わる時刻を,そのゲートの空く時刻と呼ぶ(まだ誰も受付をしていないゲートは0とする)。参加者を番号の順に,空く時刻が早い方のゲートに割り当てる。空く時刻が等しいときはゲート1に割り当てる。
規則2:受付の開始時刻は,その人の到着時刻と,割り当てたゲートの空く時刻のうち,遅い方とする。終了時刻は開始時刻に受付にかかる時間を加えた時刻とし,これをそのゲートの新しい空く時刻とする。開始時刻から到着時刻を引いた時間を,その人の待ち時間とする。
表1は,昨年の最初の8人の記録と,規則1・規則2で求めた結果である。
表1 昨年の最初の8人の記録と規則1・規則2で求めた結果(単位は分)
| 1番目 | 2番目 | 3番目 | 4番目 | 5番目 | 6番目 | 7番目 | 8番目 |
|---|
| 到着時刻 | 0 | 0 | 1 | 2 | 3 | 6 | 11 | 12 |
|---|
| 受付にかかる時間 | 3 | 5 | 4 | 2 | 3 | 5 | 2 | 3 |
|---|
| ゲート | 1 | 2 | 1 | 2 | ア | ? | 1 | 2 |
|---|
| 開始時刻 | 0 | 0 | 3 | 5 | ? | ? | 11 | 12 |
|---|
| 終了時刻 | 3 | 5 | 7 | 7 | イウ | ? | 13 | 15 |
|---|
| 待ち時間 | 0 | 0 | 2 | 3 | ? | エ | 0 | 0 |
|---|
(“?”の部分は伏せてある)
1番目の人のときは二つのゲートの空く時刻がどちらも0なので,ゲート1で時刻0から3まで受付をした。2番目の人は,空く時刻が0のゲート2に割り当てられた。3番目の人は時刻1に着いたが,早い方のゲート1も時刻3までふさがっているので,2分待った。
同じように考えると,5番目の人はゲートアに割り当てられ,終了時刻はイウである。また,6番目の人の待ち時間はエ分である。
さらにKさんは,表1から,ある人の待ち時間が0分より長くなるのは,その人を割り当てる直前にオときであると気づいた。
オの解答群
⓪二つのゲートのうち少なくとも一方の空く時刻が,その人の到着時刻より遅い
①二つのゲートの空く時刻が,どちらもその人の到着時刻より遅い
②二つのゲートの空く時刻が,どちらもその人の到着時刻と等しいか,それより遅い
③二つのゲートの空く時刻が,どちらもその人の到着時刻より早い
問2次の文章を読み,空欄カ〜サに入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。ただし,空欄コ・サは同じものを繰り返し選んでもよい。
次にKさんは,規則1・規則2に従って,各参加者のゲートと待ち時間を表示するプログラムを作成した(図1)。
配列 Touchaku・Jikan には,表1の到着時刻と受付にかかる時間を番号の順に格納する。添字は1から始まり,参加者の番号を表す(例えば Touchaku[6] は6,Jikan[6] は5)。配列 Aki の Aki[1]・Aki[2] は,それぞれゲート1・ゲート2の空く時刻を表し,(03)行目でどちらも0にしている。
【関数の説明】
要素数(配列)…引数として与えた配列の要素の数を返す。
例:配列 Kazu が [4, 9, 2] のとき,要素数(Kazu)は3となる。
(04)〜(11)行目の繰り返しで i 番目の人を扱う。(05)〜(08)行目では規則1により,割り当てるゲートの番号を変数 g に代入する。(09)行目では規則2の開始時刻を関数「最大値」で求めて変数 kaishi に代入し,(10)行目ではそのゲートの空く時刻を終了時刻に更新する。(11)行目では番号・ゲート・待ち時間を表示する。
【関数の説明】
最大値(x, y)…二つの値を比べて大きい方の値を返す。二つの値が等しいときはその値を返す。
例:最大値(2, 9)は9,最大値(4, 4)は4となる。
(01)Touchaku = [0, 0, 1, 2, 3, 6, 11, 12]
(02)Jikan = [3, 5, 4, 2, 3, 5, 2, 3]
(03)Aki = [0, 0]
(04)i を 1 から カ まで 1 ずつ増やしながら繰り返す:
(05)もし キ ならば:
(06)g = 1
(07)そうでなければ:
(08)g = 2
(09)kaishi = 最大値(Touchaku[i], ク)
(10)Aki[g] = kaishi + ケ
(11)表示する(i, "番目:ゲート", g, ",待ち時間", コ - サ, "分")
図1 各参加者のゲートと待ち時間を表示するプログラム
図1のプログラムを実行すると,1行目に「1番目:ゲート1,待ち時間0分」と表示され,8人分の表示はすべて表1と一致した。なお,(11)行目の時点では,Aki[g] は(10)行目で更新済みである。
カの解答群
⓪要素数(Aki)
①要素数(Touchaku) - 1
②要素数(Touchaku)
③要素数(Touchaku) + 1
キの解答群
⓪Aki[1] < Aki[2]
①Aki[1] <= Aki[2]
②Aki[1] >= Aki[2]
③Aki[1] <= Touchaku[i]
④Jikan[1] <= Jikan[2]
クの解答群
⓪Aki[1]
①Aki[2]
②Aki[g]
③Aki[3 - g]
④Jikan[i]
⑤Touchaku[i] + Jikan[i]
ケの解答群
⓪Jikan[g]
①Jikan[i + 1]
②Jikan[i]
③Touchaku[i]
④Aki[g]
コ・サの解答群
⓪kaishi
①Aki[g]
②Touchaku[i]
③Jikan[i]
④Touchaku[g]
⑤0
問3次の文章を読み,空欄シに入れるのに最も適当なものを,後の解答群のうちから一つ選べ。また,空欄スに入れるのに最も適当なものを,図2の⓪〜③のうちから一つ選べ。空欄セに当てはまる数字をマークせよ。
Kさんは,図1の結果を実行委員長のMさんに見せた。
Mさん名簿を五十音順に並べるなど手順を見直せば,一人あたりの受付時間をそろえて短くできそうです。
Kさんでは,受付にかかる時間を全員同じとして,2分,3分,4分と変えたときの,待ち時間の最も長い人の待ち時間(以下,最長の待ち時間)を調べます。到着時刻は表1のままにします。
Kさんは図2のプログラムを作成した。変数 uketsuke は一人あたりの受付にかかる時間で,(03)行目からの繰り返しで2から4まで変える。(05)行目では,次の関数「早い方」を用いて,図1の(05)〜(08)行目と同じ処理を1行で行う。
【関数の説明】
早い方(x, y)…x が y 以下ならば1を,x が y より大きければ2を返す。
例:早い方(5, 8)は1,早い方(6, 6)は1,早い方(9, 4)は2となる。
(06)・(07)行目は,受付にかかる時間がどの人も uketsuke である点を除いて図1の(09)・(10)行目と同じである。(08)行目では待ち時間を変数 machi に代入し,(09)行目では,それまでの最長の待ち時間を表す変数 saichou を関数「最大値」を用いて更新する。(10)行目では,受付にかかる時間ごとの最長の待ち時間を表示する。
(01)Touchaku = [0, 0, 1, 2, 3, 6, 11, 12]
(02)ninzu = 要素数(Touchaku)
⓪←
(03)uketsuke を 2 から 4 まで 1 ずつ増やしながら繰り返す:
①←
(04)i を 1 から ninzu まで 1 ずつ増やしながら繰り返す:
②←
(05)g = 早い方(Aki[1], Aki[2])
(06)kaishi = 最大値(Touchaku[i], ク)
(07)Aki[g] = kaishi + uketsuke
(08)machi = コ - サ
(09)saichou = 最大値(saichou, シ)
③←
(10)表示する("受付時間", uketsuke, "分:最長の待ち時間", saichou, "分")
図2 受付にかかる時間ごとに最長の待ち時間を求めるプログラム
(図2の⓪〜③は,2行を加える場所の候補である。①と②はそれぞれ(03)行目・(04)行目の繰り返しの中の先頭,③は(04)行目からの繰り返しを抜けた直後を表す。)
図2では,Aki と saichou の初期設定を書き忘れている。Kさんは「Aki = [0, 0]」と「saichou = 0」の2行を図2のスの位置に加えて実行し,図3の結果を得た。
受付時間2分:最長の待ち時間1分
受付時間3分:最長の待ち時間3分
受付時間4分:最長の待ち時間5分
図3 2行を加えた図2の実行結果
Mさん受付を3分以内にできれば,昨年の到着の様子なら待ちは最長3分ですね。
Kさんただ,今年はチラシで受付の開始時刻を知らせたので,始まってすぐに人が集まりそうです。到着時刻を予想して調べ直します。
Kさんが,2行を加えた図2の(01)行目を次のように変えて実行すると,3行目に「受付時間4分:最長の待ち時間セ分」と表示された。
(01)Touchaku = [0, 0, 0, 1, 2, 5, 6, 6]
シの解答群
⓪kaishi
①Aki[g]
②machi
③saichou + machi
④machi + 1
⑤Touchaku[i]