ABC194 - Atcoder/Python精進のための解説メモ

カレンダーアイコン
2021/06/14

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.

解答

まだ解いていません

要点解説メモ