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])
コメント