ABC194 - Atcoder/Python精進のための解説メモ
2022/12/27
ABC194 - A.I Scream
AtCoder公式 | ABC194 - A.I Scream解答
def judge(a, b):
c = a + b
if c >= 15 and b >= 8:
return 1
elif c >= 10 and b >= 3:
return 2
elif c >= 3:
return 3
else:
return 4
a, b = map(int, read().split())
print(judge(a, b))
要点解説メモ
- 愚直に分岐
ABC194 - B.Job Assignment
AtCoder公式 | ABC194 - B.Job Assignment解答
n = int(input())
aaa = [0] * n
bbb = [0] * n
ans = 10 ** 10
for i in range(n):
aaa[i], bbb[i] = map(int, input().split())
for i in range(n):
for j in range(n):
if i == j:
ans = min(ans, aaa[i] + bbb[j])
else:
ans = min(ans, max(aaa[i], bbb[j]))
print(ans)
要点解説メモ
- 条件分岐しながら全探索
ABC194 - C.Squared Error
AtCoder公式 | ABC194 - C.Squared Error解答
n = int(input())
aaa = list(map(int, input().split()))
m = 200
cnt = [0] * (2 * m + 1)
ans = 0
for a in aaa:
cnt[a + m] += 1
for i in range(2 * m + 1):
for j in range(i + 1, 2 * m + 1):
ans += (cnt[i] * cnt[j]) * (j - i) ** 2
print(ans)
別解
n = int(input())
aaa = list(map(int, input().split()))
print(n * sum([a ** 2 for a in aaa]) - sum(aaa) ** 2)
要点解説メモ
- 組み合わせ全探索すると余裕で間に合わない
- Aの範囲が狭く、401通りしかないことに注目する
- 例えばA内に2が4つ、3が5つあった場合、4×5通り分の(3-2)**2が合算されるということ
- なので先にaが何個ずつあるかカウントして計算すればよい
- C問から数えるものを変えないと計算量間に合わないものが多いので、数えるものをずらす発想をつよくもつ
- 別解:n=4くらいまで実験すると、簡単な数列に変換できそうなことに気づくので、代入するだけ
- n=4 の時 4(a ** 2 + b ** 2 + c ** 2 + d ** 2) - (a + b + c + d) ** 2
ABC194 - D.
AtCoder公式 | ABC194 - D.解答
まだ解いていません