リアルタイムに解けた問題
A - Welcome to AtCoder Land
問題文
高橋くんはAtCoder Landを目指しています。目の前に看板が置かれているので、ここがAtCoder Landであるかどうか判定したいです
文字列$S$,$T$が空白区切りで与えられます。$S=$ AtCoder
かつ$T=$ Land
であるかどうか判定してください。
制約
- $S$,$T$は英大小文字からなる長さ1以上10以下の文字列
アルゴリズム
if文で条件分岐。$S$,$T$がそれぞれAtCoder
、$T=$ Land
であればYes、そうでなければNoを出力。
ソースコード
S, T = input().split()
if S == 'AtCoder' and T == 'Land':
print('Yes')
else :
print('No')
B - Ticket Counter
問題文
AtCoder Landの入口には1つのチケット売り場があり、来園客はこのチケット売り場の前位に一列に並んで順にチケットを購入します。チケットの購入手続きには一人当たり$A$秒かかり、列のセントの人がチケットを購入し終わると、(存在すれば)次の人がすぐさま購入手続きを開始します。
現在チケット売り場に並んでいる人はおらず、今から$N$人の人が順にチケットを買いに来ます。具体的には、$i$番目の人は今から$T_{i}$秒後にチケット売り場を訪れ、すでに列が存在すればその最後尾に並び、存在しなければすぐさま購入手続きを開始します。ここで、$T_{1} < T_{2} < ・・・ < T_{N}$です。
各 $i$ $(1 \leq i \leq N)$について、$i$番目の人がチケットを購入し終わるのは今から何秒後か求めてください。
制約
- $1 \leq N \leq N$
- $0 \leq T_{1} < T_{2} <・・・< T_{N} \leq 10^{6}$
- $1 \leq A \leq 10^{6}$
- 入力はすべて整数
アルゴリズム
チケットの購入タイミングを測るための変数countを定義。
for文でループを回し、$i=0$の時、一人目の購入者は、その人が来た時間にチケットを購入するのにかかる時間$A$を足して出力。$N>1$、二人目以降は、チケット売り場に訪れた時間$T[i]$と変数countとの大小関係で処理を変える。countのほうが大きい場合は、先に訪れた人のチケット購入が終わっていないので、countにAを加えて出力。そうでない場合は、先に訪れた人のチケット購入が終わっているので、countに、$(T[i]-count)$の差と$A$を加えて出力。
ソースコード
N, A = map(int, input().split())
T = list(map(int, input().split()))
count = 0
for i in range(N):
if i == 0:
count = T[i] + A
print(count)
else:
if T[i] < count:
count += A
print(count)
else:
count = count + (T[i] - count) + A
print(count)