ABC001 メモ
A - 積雪深差
問題文通り、答えは$H_1-H_2$。
001A.py
H_1 = int(input())
H_2 = int(input())
ans = H_1 - H_2
print(ans)
B - 視程の通報
入力は単位がメートル(m)で与えられるが、判定条件は単位がkmで与えられているため、少々複雑になる。
今回は判定条件をmに統一して計算した。
001B.py
m = int(input())
if m < 100:
VV = '00'
elif m <= 5000:
if len(str(m)) == 4:
VV = str(m)[:2]
else:
VV = '0' + str(m)[0]
elif m <= 30000:
VV = str(m//1000+50)
elif m <= 70000:
VV = str((m//1000-30)//5+80)
else:
VV = '89'
print(VV)
C - 風力観測
問題文通り実装した。場合分けが煩雑なのと、小数を扱う場合には誤差に注意が必要。小数の扱いについては、整数で扱えるように条件式を加工した。
具体的には、風速は分速のまま扱えるようにした。今回の場合、風速$0.2$m/s以下という条件は、$0.25$m/s未満と同値なため、これを60倍して$15$m/min未満、というようにすることで、小数の計算を避けた。
公式の解説にあるように、場合分けを手動でたくさん書くのはあまり望ましくないのだが…
001C.py
Deg, Dis = map(int, input().split())
if Deg <= 112:
Dir = 'N'
elif Deg <= 337:
Dir = 'NNE'
elif Deg <= 562:
Dir = 'NE'
elif Deg <= 787:
Dir = 'ENE'
elif Deg <= 1012:
Dir = 'E'
elif Deg <= 1237:
Dir = 'ESE'
elif Deg <= 1462:
Dir = 'SE'
elif Deg <= 1687:
Dir = 'SSE'
elif Deg <= 1912:
Dir = 'S'
elif Deg <= 2137:
Dir = 'SSW'
elif Deg <= 2362:
Dir = 'SW'
elif Deg <= 2587:
Dir = 'WSW'
elif Deg <= 2812:
Dir = 'W'
elif Deg <= 3037:
Dir = 'WNW'
elif Deg <= 3262:
Dir = 'NW'
elif Deg <= 3487:
Dir = 'NNW'
else:
Dir = 'N'
if Dis < 15:
Dir = 'C'
W = 0
elif Dis < 93:
W = 1
elif Dis < 201:
W = 2
elif Dis < 327:
W = 3
elif Dis < 477:
W = 4
elif Dis < 645:
W = 5
elif Dis < 831:
W = 6
elif Dis < 1029:
W = 7
elif Dis < 1245:
W = 8
elif Dis < 1467:
W = 9
elif Dis < 1707:
W = 10
elif Dis < 1959:
W = 11
else:
W = 12
print(Dir, W)
D - 感雨時刻の整理
時間の区間を扱う問題だが、今回は最小の単位が分であり、最長でも1440分なので、配列で保持しても十分高速に計算できそう。
入力を00:00からの分に計算し直し、配列に保持する。この時、区間全てに対して計算を行う必要はなく、始まった時と終わった時に対して計算を行う、いわゆる「いもす法」で扱えば十分である。
計算量は$N$が大きい時でも$O(N)$程度であるため、十分高速。
001D.py
def adj(num):
h = str(num//60)
m = str(num%60)
time = h.zfill(2) + m.zfill(2)
return time
N = int(input())
lst = [0]*1442
for i in range(N):
S, E = input().split('-')
S = 60*int(S[:2]) + int(S[2:])
E = 60*int(E[:2]) + int(E[2:])
if S%10 < 5:
S -= S%10
else:
S -= S%10
S += 5
if 0 < E%10 < 6:
E -= E%10
E += 5
else:
E += 5
E -= E%10
lst[S] += 1
lst[E+1] -= 1
tmp = 0
S = -1
E = -1
for i in range(1442):
tmp += lst[i]
if tmp and S == -1:
S = i
if tmp == 0 and S != -1:
E = i-1
S = adj(S)
E = adj(E)
print(S + '-' + E)
S = -1