ABC214の参加記録です。
Python3で参加している茶色中位の私が、私が理解した内容で記載していきます。
数学的な厳密性やより効率の良いコードを求める方の参考になることはないと思います。
A – New Generation ABC
標準入出力と条件分岐が書けるかの問題。
標準入力を受けるには、 input() を使うのが良いと思います。
条件分岐は、 if と else を使用することが多いですが、今回は3つの場合分けをするため、elif も使うことにします。
あとは、問題文に書いてある通りに実装していけばOKですね。
# AtCoder Beginner Contest 214
# A - New Generation ABC
N = int(input())
if N <= 125 :
ans = 4
elif N <= 211 :
ans = 6
else :
ans = 8
print(ans)
私ははじめ、累計問題数を求める問題だと思いこんでfor文を書き出しましたが、入出力例を見てようやく問われている内容を理解しました。
問題文は、思い込みを排除して正確に読まないとダメですね。
B – How many?
条件に合う候補を全部調べる( 全探索する )問題。
a,b,cが0以上100以下ということで、すべての候補をfor文で処理していけばOKです。
二重や三重ののfor文は、処理回数が多くなって、TLEになるのではないかと不安になりますが、1から100までの繰り返し処理をそれぞれ3回実施しても1,000,000回までにしかならないため、十分間に合います。
# AtCoder Beginner Contest 214
# B - How many?
S, T = map(int,input().split())
ans = 0
for i in range (101) :
for j in range (101) :
for k in range (101) :
if i+j+k <= S and i*j*k <= T :
ans += 1
print(ans)
C – Distribution
円環でのシミュレーションをする問題。
私は、配列2つをそれぞれ2倍して、2N回、各すぬけ君が初めに宝石を受け取る時間をシミュレーションしました。
円環の処理については、PASTの過去問(ピザ)などで解いたことがあるため、スムーズに解けました。
あとは、各すぬけ君に対して、高橋君から渡される時間と、1人前のすぬけ君から渡されてきた時間との比較をして、早いほうをメモしていけば良いですね。
# AtCoder Beginner Contest 214
# C - Distribution
N = int(input())
S = list(map(int,input().split()))
T = list(map(int,input().split()))
S = S+S
T = T+T
ans_ls = [10**18]*(2*N)
ans_ls[0] = T[0]
for i in range (1, 2*N) :
ans_ls[i] = min(ans_ls[i], ans_ls[i-1]+S[i-1], T[i])
for ans in ans_ls[N:] :
print(ans)
全然意識していませんでしたが、シミュレーションしている内容としては、DP(動的計画法)なのですね。
コメント