3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AtCoder ABC401 振り返り(緑コーダーがPythonでABC問題)

Posted at

AtCoder Beginner Contest 401 - AtCoder 振り返り

ABCの3問解答で、レーティングはまたも下がってしまい、ギリギリ緑色に留まれました。あと-2になったら茶色になります。
今回の反省点は、C問題の意味がわからず、入力例3の答えが出なくて時間がかかってしまった。といった感じです。
D問題は丁寧に場合分けすれば解けたようですけど、これもちょっと難しかったですね...。DPとかで解けたのだろうか。

A - Status Code

文字列の先頭の文字が "2" かどうかで判定します。今回は最初の1文字だけを見ればいいので、入力値は整数に変換したりせず、文字列のままにしました。

S = input()
print("Success" if S[0] == "2" else "Failure")

B - Unauthorized

ログイン状態を変数 login に記録するようにします。
あとは、S == "private" かつ login == False のときの回数を数えればokです。

N = int(input())

login = False
count = 0
for i in range(N):
    S = input()
    if S == "login":
        login = True
    elif S == "logout":
        login = False
    elif S == "private" and login == False:
        count += 1
print(count)

C - K-bonacci

問題の条件の数式がよくわからず。入力例1がフィボナッチ数列だったため、「単純にフィボナッチ数列を求めるってこと?」みたいな感じで、問題を誤解していた。

問題タイトルが K-bonacci とある通り、K この数を足し合わせた数列にしなければならない。

たとえば K = 3 なら
A = [1, 1, 1, 3, 5, 9, 17 ....] となる。
自分の直前の K 個分の数を足す。

意味がわかってしまえば簡単で、両面キューを使って K 個分の数をキューに保存するようにすれば良い。キュー内の値の合計は que_total に入れておき、右側に追加したとき・左側から削除したときに、それぞれ足したり引いたりした。

N, K = map(int, input().split())

que = deque()
que_total = 0
for i in range(N + 1):
    if i < K:
        # 1 をキューに追加
        que.append(1)
        que_total += 1
    else:
        # 次の数はキュー内の数の合計値
        que.append(que_total)
        que_total += que_total

        # 左側の数をキューから削除
        deleted = que.popleft()
        que_total -= deleted
        que_total %= mod

print(que[-1] % mod)
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?