ABC165 復習

今回はBまでしか解けませんでした。

atcoder.jp

A問題 We Love Golf

A~Bのうち、Kで割り切れる数字があればOK、なければNGを出力します。
なので、AからBまでの数値を順にKで割る操作を繰り返せば答えが出せます。

K = int(input())
a, b = map(int, input().split())

for i in range(a, b + 1):
    if i % K == 0:
        print('OK')
        break
else:
    print('NG')

B問題 1%

小数計算問題です。
X以上になるまで、100に対して1%を足していきます。

X = int(input())

n = 100
ans = 0
while True:
    n = int(n * 1.01)
    ans += 1
    if n >= X:
        break

print(ans)

C問題 Many Requirements

解けませんでした。
てっきりO(1010)かかると思ってしまい、無駄に考えてしまいました。
単調増加のリストになるので、1010はかからないんですよね。
以下、DFSを用いてありうるリストを全列挙して、最大得点がいくつになるのかを求めます。

n, m, q = map(int, input().split())

abcd = []
for i in range(q):
    abcd.append(tuple(map(int, input().split())))

ans = 0


def solve(A):
    if len(A) >= n + 1:
        global ans
        now = 0
        for a, b, c, d in abcd:
            if A[b] - A[a] == c:
                now += d
        ans = max(ans, now)
        return
    for i in range(A[-1], m + 1):
        solve(A + [i])

solve([1])
print(ans)

今回はここまでです。お疲れ様でした。