AtCoder Beginner Contest 165 振り返り

参照

atcoder.jp

A問題

汚いコードですが焦ってたので許してくだちい。

k = int(input())
a,b = map(int, input().split())
i=a
while i<=b:
  if i%k==0:
    print('OK')
    exit(0)
  i+=1
print('NG')

B問題

簡単なはずの複利問題。
なぜか答えが合わず解けません。
A→B(解けない)→C→B(解けない)→D(正解者数が多く解けそう)→D(解けない)
こんな感じでまさに二兎追う者は一兎をも得ず状態

ダメ。何があかんねん。

import math
x = int(input())
print(math.ceil(math.log(x/100, 1.01)))

C問題

D問題より正解者が少なかったC問題。
問題を理解するのに時間がかかってしまいました。
でも解けた!!

集合A候補

まず最初にAの組み合わせを配列化します。
1≤A1≤A2...≤An≤M
とされているので、1~MからをN個の要素で構成されるタプルを作成。
タプルの先頭に1、後尾にMを追加します。

入力集合

次の配列はQ個の入力集合による配列です。

総当たりで計算

集合A候補から条件に合致する場合に、
diを合計しその最大値を求めていきます。
2≤N≤10、1≤M≤10なので、
総当たりで計算してもTLEにはならないはずです。

n,m,q = map(int,input().split())
sum_=0
 
import itertools
 
A_kouho = []
for i in itertools.combinations_with_replacement(range(1, m+1), n):
    i = (1,) + i + (m,)
    A_kouho.append(i)
 
four_r = []
for j in range(q):
  Q = list(map(int, input().split()))
  four_r.append(Q)
 
max_ = 0
for A in A_kouho:
  sum_ = 0
  for j in four_r:
    #print('%d %d'%(A[j[1]]-A[j[0]],j[2]))
    if A[j[1]]-A[j[0]]==j[2]:
      sum_+=j[3]
    if sum_>max_: max_=sum_
print(max_)

D問題

今まで見てきたD問題で一番解けそうと思いました。