AtCoder Beginner Contest 127をPythonで解きました(A〜D)。
A - Ferris Wheel(100点)
- 丁寧に条件分岐
A, B = list(map(int, input().split())) if (A <= 5): print(0) elif (A >= 13): print(B) else: print(B//2)
B - Algae(200点)
- 漸化式を指示通りに書く
def f(r, D, x): return r*x - D r, D, x = list(map(int, input().split())) for _ in range(10): x = f(r, D, x) print(x)
C - Prison(300点)
- 「左端として一番右にあるゲート」と「右端として一番左にあるゲート」を調べる
- 解が0個の場合も考えて、maxを取る
N, M = list(map(int, input().split())) L = [0] * M R = [0] * M for i in range(M): L[i], R[i] = list(map(int, input().split())) print(max(0, min(R) - max(L) + 1))
D - Integer Cards(400点)
- リストAに「書き換える選択肢となる要素」を追加
- 大きい順にN個取った和が解となる
- 方針は分かった後にTLEを取るのが難しかった(提出)
- 「書き換える選択肢となる要素」を追加するとき、事前に大きい順にソートしておき、N個より多くは追加しないようにすると通った
N, M = list(map(int, input().split())) A = list(map(int, input().split())) cards = [list(map(int, input().split())) for i in range(M)] cards = sorted(cards, key=lambda x: x[1], reverse=True) cnt = 0 for card in cards: A += [card[1]]*card[0] cnt += card[0] if cnt >= N: break A.sort(reverse=True) print(sum(A[:N]))