ABC214参戦記

プログラミング

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(動的計画法)なのですね。

コメント

タイトルとURLをコピーしました