こんばんは,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回
- 開始位置と終了位置から引いた,に平行な線の交点が整数 → 2回(1回目でその交点に移動し,2回目で終了位置に移動)
- 開始位置を通る,に平行な直線上のx座標がの点から,終了位置までope1, ope2, ope3のどちらか1回で移動可能 → 2回
- 開始位置を中心に → 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精進もします!!!!