AtCoder ABC2週目参戦日記

スポンサーリンク
日記
スポンサーリンク

2週目ABC

 先週から参戦し、今週で2回目のコンテスト(AtCoder Beginner Contest 258)に参加しました。今回は前回より1問多く出来て3問正解でした。4問目は、解けそうなところまでいったのですが、結局時間切れ。ただ、タイムオーバーのあとも頑張ったのですが、終わった後の疲労もあるのか、後から見直したら、余計に混乱して、まだ解けていません。。。同じコードを書くにしても、もう少しコメントなどを入れて、ちゃんと見直せるようにしないといけません。他の問題でも、一度出来上がったと思っても、テストのところでちょっとおかしかったりして、修正に思いのほか時間を使ってしまっています。どちらにしても、もっと頭を整理してコードを書く練習が必要だと感じました。

 あと、80分経過くらいのところで、突如集中力が切れてしまいましたが、その辺りは100分戦えるだけの気力が必要だと感じました。なかなか過去問を解く時間はとれていませんが、こうして、毎週の夜、100分間、プログラミングに向き合うのもよいトレーニングになりました。

 プログラミングに関しては、今の自分のレベルでは、美しいアルゴリズムを書くよりも、泥臭くゴリゴリと場合分けをしたりして、作る方がよさそうです。

 Ratingについては、先週より上がりましたが、頭打ちになってからが勝負です。ここから、ぐぐぐっと上がっていければよいですが、色付きのところにいくのは、少し難しいのかもしれません。

 

提出コード

エレガントにほど遠いです。駄コード失礼します。

A-When

ゼロで埋めるところは条件でやっていますが、print-formatのところでもっとスマートに書けたようでした。

k = int(input())

a = k//60
b = k%60
if b <= 9:
    mm = '0'+str(b)
else:
    mm = str(b)

print("{}:{}".format(str(21+a), mm))

B – Number Box

解説を聞いたとき、気づいたのですが、問題を読み違えて、4マス動かしてしまっています。答えは同じになるのですが。。。方向は力業で変えています。

def check(x, y):
    Num = [""]*8

    for i in range(1, n+1):
        
        # U
        Num[0] += a[(x-i)%n][y]
        # D
        Num[1] += a[(x+i)%n][y]
        # L
        Num[2] += a[x][(y-i)%n]
        # R
        Num[3] += a[x][(y+i)%n]
        # UL
        Num[4] += a[(x-i)%n][(y-i)%n]
        # UR
        Num[5] += a[(x-i)%n][(y+i)%n]
        # DL
        Num[6] += a[(x+i)%n][(y-i)%n]
        # DR
        Num[7] += a[(x+i)%n][(y+i)%n]

    Num_int = [int(Num[i]) for i in range(8)]

    Num_max = 0

    for i in range(8):
        if Num_int[i] > Num_max:
            Num_max= Num_int[i]

    return Num_max

n = int(input())

a = []

for i in range(n):
    ai = input()
    a.append([ai[j] for j in range(n)])

Num_max_f = 0

for x in range(n):
    for y in range(n):
        Num_max = check(x, y)
        if Num_max > Num_max_f:
            Num_max_f = Num_max
print(Num_max_f)

C – Rotation

Python3で実行時間が1502msとギリギリでした。あとからPyPy3で試すと1115msだったので、今度からPyPy3の方が安全かも?

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

zero_posi = 0

for i in range(q):
    ti, xi = map(int, input().split())
    if ti == 1:
        zero_posi = (zero_posi+xi)%n
    else:
        out_chr_posi = (xi - zero_posi + n -1) % n
        print(s[out_chr_posi])
日記
スポンサーリンク
鷹の目週末プログラマー

コメント