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

2020/11/26

ABC178 - A.Not

AtCoder公式 | ABC178 - A.Not

解答

x = int(input())
print(x ^ 1)

要点メモ

  • ifで条件分岐させるだけ
  • bit全探索でもよく出るので、排他的論理和(XOR)を使えるようになっておくと早くて良さそう

ABC178 - B.Product Max

AtCoder公式 | ABC178 - B.Product Max

解答

a, b, c, d = map(int, input().split())
print(max(a * c, a * d, b * c, b * d))

要点メモ

  • 端同士をかけた時のいずれかが最大になることに、すぐ気づきたいところ

ABC178 - C.Ubiquity

AtCoder公式 | ABC178 - C.Ubiquity

解答

n = int(input())
mod = 1000000007
ans = pow(10, n, mod) - pow(9, n, mod) * 2 + pow(8, n, mod)
print(ans % mod)

要点メモ

  • 場合の数のよくある問題
  • AかつBを出すために、全体-A以外-B以外+AかつB以外を計算するやつ
  • 使わないと忘れるので、ベン図を書いて考えるようにしたいところ

ABC178 - D.Redistribution

AtCoder公式 | ABC178 - D.Redistribution

解答

s = int(input())
dp = [0] * (s + 4)
mod = 1000000007
dp[0] = 1
dp[1] = 0
dp[2] = 0
dp[3] = 1
if s < 4:
    print(dp[s])
else:
    for i in range(4, s + 1):
        dp[i] = (dp[i - 1] + dp[i - 3]) % mod
    print(dp[s])

要点メモ

  • DPでは特に、実験してみる→漸化式を立てて簡易化する、という数学的な思考をきちんと実行する
  • 漸化式ってことは条件分岐がありそう、をすぐ思えるようにしておく