Atcoderでもっと多くの問題を解きたい!と言うことで学習していきます。
期間は6ヶ月とし、水色コーダーを目指します。
筆者の学習歴
学習歴はこんな感じです。
まだまだ入門と言う感じですね。
・利用言語はPython3
・Pythonの利用は業務で少し
・学習は「みんなのPython」を読んだくらい
・ABCコンテストには数回参加した(解けるのは1〜2問)
競プロではC++を使う方が多いかと思いますが、筆者はPythonのシンプルさに感動したためPythonで取り組みます。
今日が2022年6月4日(土)で、9月20日までの半年の期間で学習を進めます。
毎週のAtCoder Beginner Contest(ABC)をペースメーカーにしていきます。
今週学習したこと
今週からABC Problemsで過去問に取り組み始めました。
ABC ProblemsでA、B問題を中心に50問ほど解きました。
A問題はサクサクと進めるので、まずはA問題を全部解ききるように進めます。
ABC ProblemsでA、B問題を50問
次の目標
茶色に昇級する。
茶色昇級のため、目標を整理しました。
・A・B問題を高速で解く(理想10分以内)
・C・D問題をどちらか解く
私は今、A・B問題を解くのに15分前後かかっています。
これを10分以内で解くだけでも、順位は1,000以上アップが期待できます。
今週のABC
ABCに参加してきました。
初の3問AC、茶色パフォーマンスを出せました!
進歩を感じられて嬉しいですね。
AC:2問
パフォーマンス:669
レーティング:181→221
段級位:9級
結果
Last Two Digits
与えられた整数の下2桁を出力せよ
pythonの文字列として受け取り、末尾の2文字を出力しました。
ここは2分30秒と幸先の良いACです。
N=input()
print(N[-1*(len(N)-1):])
Practical Computing
与えられる数Nに対して、長さNの整数列を出力せよ。
・j=0またはj=ij=iの時、aij=ai,
・それ以外の時、aij=ai-1*aj-1+ai-1j
(N+1)×Nの2次元リストAを用意して、0で初期化した後、条件に従い値を更新します。
2次元リストの初期化と更新、出力形式を合わせるのに時間がかかりました。
かなり手こずりましたが、B問題を46分かけてAC。
N=int(input())
A = [[0 for j in range(N+1)] for i in range(N)]
A[0][0]=1
for i in range(0,N):
for j in range(i+1):
if j==0 or j==i:
A[i][j]=1
else:
A[i][j]=A[i-1][j-1]+A[i-1][j]
#for k in range(i):
#print(A[i])
#print(''.join(A[i]))
L=[str(a) for a in A[i] if a!=0]
L=" ".join(L)
print(L)
#print(A)
K Swap
長さNの数列と整数Kが与えられる。
aiとai+Kの値を入れ替える操作を無制限に行うとき、数列を昇順に並び替えられるか判定せよ。
残り時間はこの問題に取り組みました。
modKで考えて解けることに気づきました。
n,k=list(map(int,input().split()))
A=list(map(int,input().split()))
#print(A)
B=sorted(A)
#print(B)
C=A
D=[]
for i in range(k):
#D=sorted(C[i::k].sort())
#print(D)
D=C[i::k]
D.sort()
C[i::k]=D
#print(D)
#print(C[i::k])
if C==B:
print("Yes")
else:
print("No")
#print(C)
ここも37分かけてACしました。
感想
A,B,C問題をACすることができました。
パフォーマンスも669だったので、Dも解ければ緑パフォーマンスが見えそうです。
来週学習すること
C、D問題以降も勝負できる様にするため、まずはAtCoder ProblemsでA、B問題を解ききります。
その後は、ソートやDPなど分野に絞って学習していく予定です。
・AtCoder Problems