Atcoderでもっと多くの問題を解きたい!と言うことで学習していきます。
期間は6ヶ月とし、水色コーダーを目指します。
筆者の学習歴
学習歴はこんな感じです。
まだまだ入門と言う感じですね。
・利用言語はPython3
・Pythonの利用は業務で少し
・学習は「みんなのPython」を読んだくらい
・ABCコンテストには数回参加した(解けるのは1〜2問)
競プロではC++を使う方が多いかと思いますが、筆者はPythonのシンプルさに感動したためPythonで取り組みます。
今日が2022年5月28日(土)で、9月20日までの半年の期間で学習を進めます。
毎週のAtCoder Beginner Contest(ABC)をペースメーカーにしていきます。
今週学習したこと
今週からABC Problemsで過去問に取り組み始めました。
ABC ProblemsでA、B問題を中心に20問ほど解きました。
ABC ProblemsでA、B問題を20問
次の目標
茶色に昇級する。
茶色昇級のため、目標を整理しました。
・A・B問題を高速で解く(理想10分以内)
・C・D問題をどちらか解く
私は今、A・B問題を解くのに20分前後かかっています。
これを10分以内で解くだけでも、順位は1,000以上アップが期待できます。
今週のABC
ABCに参加してきました。
結果はこんな感じでした。
AC:2問
パフォーマンス:358
レーティング:155→173
段級位:10級
結果
Median
a,b,cが与えられる。bが中央値かを判定せよ。
3つの整数なので、条件を全部書けば良いです。
ここは3分53秒でACしました。
a,b,c=list(map(int,input().split()))
if a<=b & b<=c:
print("Yes")
elif a>=b & b>=c:
print("Yes")
else:
print("No")
Distance Between Tokens
たてH、横Wのマス目がある。
マスの中に2つコマがあり、一方のマスをマス目からでないように移動させる時、何回動かす必要があるか
マス目の中でコマがある座標を取得して、たてと横の座標の差を合計すれば答えです。
ここは10分で回答。
ここまでは14分ほどとまずまずのペースです。
import math
H, W=list(map(int,input().split()))
S = [input() for i in range(H)]
cnth=[]
cntw=[]
ans=0
for i in range(H):
for j in range(W):
if S[i][j]=="o":
cnth.append(i)
cntw.append(j)
#dist.append
ans=abs(cnth[1]-cnth[0])+abs(cntw[1]-cntw[0])
print(ans)
Fizz Buzz Sum Hard
1以上N以下の数で、Aの倍数でもBの倍数でもないものの総和を求めよ。
残り時間はこの問題に取り組みました。
全探索するとTLEするので、DPで考えましたが解けず。
実際は数学的回答で解ける問題でした。
感想
ABC253では、C問題よりD問題の方が取り組みやすかったです。
取り組んだ問題は良かったのですが、発想が足りませんでした。
来週学習すること
C、D問題以降も勝負できる様にするため、まずはbit演算と探索を練習します。
ABCの過去の問題も解き進めます。