ABC182 - Atcoder/Python精進のための解説メモ
2022/12/27
ABC182 - A.twiblr
AtCoder公式 | ABC182 - A.twiblr解答
a, b = map(int, input().split())
print(2 * a + 100 - b if 2 * a + 100 > b else 0)
要点解説メモ
- やるだけ
ABC182 - B.Almost GCD
AtCoder公式 | ABC182 - B.Almost GCD解答
n = int(input())
aaa = list(map(int, input().split()))
ans = 0
cnt = 0
for i in range(2, max(aaa) + 1):
tmp = 0
for j in range(n):
if aaa[j] % i == 0:
tmp += 1
if tmp >= cnt:
cnt = tmp
ans = i
print(ans)
要点解説メモ
- 整数kが2以上1000以下であることに注目する
- aのmax値より大きい値ではGCD度が1になるので調べなくてよい
ABC182 - C.To 3
AtCoder公式 | ABC182 - C.To 3解答
n = input()
n = [int(ni) % 3 for ni in n]
sum_n = sum(n) % 3
ans = 0
if sum_n == 0:
pass
elif sum_n == 1:
if 1 in n and len(n) > 1:
ans = 1
elif n.count(2) >= 2 and len(n) > 2:
ans = 2
else:
ans = -1
else:
if 2 in n and len(n) > 1:
ans = 1
elif n.count(1) >= 2 and len(n) > 2:
ans = 2
else:
ans = -1
print(ans)
要点解説メモ
- 丁寧ていね丁寧に場合分けする問題
- ちゃんと手書きで分岐を整理してからコード書いたほうがミスがなくて良さそう
ABC182 - D.Wandering
AtCoder公式 | ABC182 - D.Wandering解答
from itertools import accumulate
n = int(input())
aaa = list(map(int, input().split()))
ans = 0
x = 0
acc = list(accumulate(aaa))
acc_max = list(accumulate(acc, func=max))
for i in range(n):
ans = max(ans, x + acc_max[i])
x += acc[i]
print(ans)
要点解説メモ
- 実際に書いてみると累積和in累積和を使って、各i(=1, 2,..., n)動作中の最大値を出して、1番大きい値を出せば良いと気づく
- 累積和を自前で実装してTLEだったので、ミスを避けるためにも素直にaccumulate使ったほうが良さそう