ABC184の感想を書く.Python

こんばんは,tax_freeです.先週のABCは頭が痛くで参加できなかったので,二週間ぶりのABCでした(コード自体はJOI対策で書いていた).

A - Determinant

問題文の定義の通りに計算する.

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

print(a * d - b * c)

B - Quizzes

得点が負の値にならないようにmax(score - 1, 0)を取る.

n, x = map(int, input().split())
s = input()

ans = x
for i in range(n):
    if s[i] == 'o':
        ans += 1
    else:
        ans = max(ans - 1, 0)
print(ans)

C - Super Ryuma

移動回数は高々3回なので,気合で場合分け!!
問題文の書いてある操作を上から順番にope1, ope2, ope3とする.

  • 開始位置と終了位置が同じ → 0回
  • ope1, ope2, ope3のいずれか一回で移動可能 → 1回
  • 開始位置と終了位置から引いた y = x y = -xに平行な線の交点が整数 → 2回(1回目でその交点に移動し,2回目で終了位置に移動)
  • 開始位置を通る y = x y = -xに平行な直線上のx座標が r_2の点 (r_2, c'_2)から,終了位置までope1, ope2, ope3のどちらか1回で移動可能 → 2回
  • 開始位置を中心に 6\times 6 → 2回
  • 上記以外 → 3回
r1, c1 = map(int, input().split())
r2, c2 = map(int, input().split())

def ope1(r1, c1, r2, c2):
    if r1 + c1 == r2 + c2:
        return True
    else:
        return False

def ope2(r1, c1, r2, c2):
    if r1 - c1 == r2 - c2:
        return True
    else:
        return False
def ope3(r1, c1, r2, c2):
    if abs(r1 - r2) + abs(c1 - c2) <= 3:
        return True
    else:
        return False

if r1 == r2 and c1 == c2:
    print(0)
elif ope1(r1, c1, r2, c2) or ope2(r1, c1, r2, c2) or ope3(r1, c1, r2, c2):
    print(1)
elif (c2 - c1 + r1 + r2) % 2 == 0 or (c1 - c2 + r1 + r2) % 2 == 0:
    print(2)
elif abs(r2 + c1 - r1 - c2) <= 3 or abs(-r2 + c1 + r1 - c2) <= 3:
    print(2)
elif abs(r1 - r2) + abs(c1 - c2) <= 6:
    print(2)
else:
    print(3)

D - increment of coins

期待値DP?みたいやつで解けないかなと考えたけど,(期待値の問題を解いたことがない + 数Aレベルの確率ができない)ので,解けませんでした.くやしい

まとめ

Cはもっと早く解けたかなと思った.JOI難易度6が全然埋まってないので,JOI精進もします!!!!