AtCoder M-SOLUTIONS プロコンオープン 2020 参戦記
m-solutions2020A - Kyu in AtCoder
4分で突破. 書くだけ……だったが、4分もかかってしまっていると、さすがに素直に200で割って処理すべきだったと反省.
X = int(input())
if 400 <= X <= 599:
print(8)
elif 600 <= X <= 799:
print(7)
elif 800 <= X <= 999:
print(6)
elif 1000 <= X <= 1199:
print(5)
elif 1200 <= X <= 1399:
print(4)
elif 1400 <= X <= 1599:
print(3)
elif 1600 <= X <= 1799:
print(2)
elif X >= 1800:
print(1)
m-solutions2020B - Magic 2
3分で突破. 2倍なら素直にループを回しても大丈夫だろうと、素直に書き下ろした.
A, B, C = map(int, input().split())
K = int(input())
while A >= B:
K -= 1
B *= 2
while B >= C:
K -= 1
C *= 2
if K >= 0:
print('Yes')
else:
print('No')
m-solutions2020C - Marks
13分半で突破. TLE1. 固定窓だと思った私がアホでした. なまじ TLE になるものの計算は出来てしまうのが裏目になってしまう Python だった.
N, K = map(int, input().split())
A = list(map(int, input().split()))
result = []
for i in range(K, N):
if A[i] > A[i - K]:
result.append('Yes')
else:
result.append('No')
print(*result, sep='\n')
m-solutions2020D - Road to Millionaire
18分半で突破. DP だろうけど、どう DP 回せばいいんだろうなとそこそこ悩んだ. N≤80 なので O(N2) でも大丈夫なので、全ての売り買いパターンの最大値を取ればいいだけだった.
N = int(input())
A = list(map(int, input().split()))
t = [-1] * (N + 1)
t[0] = 1000
for i in range(N):
k = t[i] // A[i]
y = t[i] % A[i]
for j in range(i, N):
t[j + 1] = max(t[j + 1], k * A[j] + y)
print(t[N])
m-solutions2020E - M's Solution
突破できず. 途中で順位表を見て F の方が簡単なことに途中で気づいたが、気づいた時点では時間的に手遅れ. 正しい答えが出るナイーブなコードは書けたが、そこから計算量を減らせず.