ishihara0507 / AtCoder

AtCoderの学習記録
0 stars 0 forks source link

ABC_358_B #2

Open ishihara0507 opened 4 months ago

ishihara0507 commented 4 months ago

可変長標準入力の受付

入力される文字列の個数がわからない場合は、以下のようにリストで代入する。

T = [int(s) for s in input().split()]

A問題の S, T = map(int, input().split()) との違いは、input().split() の結果をアンパック(展開して代入)するかしないかである。 また、上のコードはリスト内包表記が使われている。 リスト内包表記とは、

[式 for 任意の変数名 in イテラブルオブジェクト]

という形で書かれ、イテラブルオブジェクトの各要素に対して式を適用して新たなイテラブルオブジェクトを作成する処理を行う。 イテラブルオブジェクトにはrange(N)なども使える。 簡単に言うと、リストの初期化とループ処理を同時に行える処理である。以下のようなコードを簡潔に記述できる。

# リスト内包表記
T = [int(s) for s in input().split()]

# 以下と同じ処理
T = []
for s in input().split():
  T.append(int(s))

i 番目の人がチケットを購入し終わるが何秒後かを求めている仕組み

# N:チケットを買いに来る人数, A:1人がチケットを購入するのにかかる時間, T:i番目の人が列に並ぶまでの時間
seconds = 0 # 経過時間を記憶
for i in range(N):
  if seconds >= T[i]:
    seconds += A
  else:
    seconds = T[i]
    seconds += A
  print(seconds)

※Tは0秒時点から数えて何秒なのかを表している。 まず、if seconds >= T[i]:でi番目の人が並ぶ時間になっているかを確認して、

ループを一周終えると1人分のチケットの購入が行われるので、ループの最後にprintf(seconds)で表示すればいい。 現実のお店をイメージして処理を考えるとイメージしやすかった。

ishihara0507 commented 4 months ago

感想

簡単だったけど少し考えた。