Atcoderに最近ハマっています。
パズル感覚で問題を解くのと、レーティングが数値で出るのが面白いですね。
期間は6ヶ月(25週間)とし、水色コーダーを目指します。
A問題を高速で解く感覚と、C問題も方針が分かるようになってきました。
筆者の学習歴
学習歴はこんな感じです。
まだまだ入門と言う感じですね。
・利用言語はPython3
・Pythonの利用は業務で少し
・学習は「みんなのPython」を読んだくらい
・ABCコンテストには数回参加した(解けるのは1〜2問)
競プロではC++を使う方が多いかと思いますが、筆者はPythonのシンプルさに感動したためPythonで取り組みます。
今日が2022年6月25日(土)で、9月20日までの半年の期間で学習を進めます。
毎週のAtCoder Beginner Contest(ABC)をペースメーカーにしていきます。
今週学習したこと
今週からABC Problemsで過去問に取り組み始めました。
ABC ProblemsでA、B問題を中心に50問ほど解きました。
A問題はサクサクと進めるので、まずはA問題を全部解ききるように進めます。
ABC ProblemsでA、B問題を80問(A:40問、B:10問)
@e869120さんの記事で分野別学習を始めました。
レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】
基本アルゴリズム12個を学ぶと良いようです。
各記事ボリュームがありますが、まずは12個基本を押さえます。
全探索 | 二分探索 | 深さ優先探索 (DFS) | 幅優先探索 (BFS) |
動的計画法 (DP) | ダイクストラ法 | ワーシャルフロイド法 | クラスカル法 |
高速な素数判定法 | べき乗を高速に計算する手法 | 逆元を計算する手法 | 累積和 |
今週は全探索を学習しました。
たのしい探索アルゴリズムの世界【前編:全探索、bit全探索から半分全列挙まで】
次の目標
前回のコンテストで茶色パフォーマンス(501)は出せました。
この調子でパフォーマンスを出せれば、あと4~5回で茶色(400)に昇級できそうです。
茶色への昇級は見えてきたので、目標を更新しました。
目標:緑色パフォーマンス(800以上)を出す
緑色パフォーマンス獲得のため、目標を整理しました。
・A・B問題を高速で解く(理想5〜10分以内)
・C・D問題をどちらかあるいは両方解く
まずはA・B問題を確実に解けるようにします。
C、D問題については簡単な場合両方、難しい場合はどちらかを解きます。
これで緑色パフォーマンスを取れる可能性があります。
今週のABC
ABCに参加してきました。
2問AC、灰色パフォーマンスでした。
前回よりパフォーマンスは下がってしまったので、次回はリベンジしたいですね。
AC:2問
パフォーマンス:381
レーティング:280→289(+9)
段級位:9級
結果
A to Z String2
N,Xが与えられる。AをN個、BをN個、….ZをN個繋げてできる文字列の先頭からX番目の文字を出力せよ。
ASCIIコードで大文字を出力できれば良いです。
問題の条件の理解に手こずってしまいました。
7分かかりましたがAC。
import math
n,x=list(map(int,input().split()))
y=math.ceil(x/n)
print(chr(65+y-1))
1D Pawn
左右一列に並ぶN個のマスに、K個のコマが配置されている。
K個のコマはAiに置かれており、以下の操作をQ回行う。
・左からLi番目のコマが右端にあれば操作しない
・左からLi番目のコマの右にコマがなければ右に1マス移動させる
Q回の操作の後のコマの並びを出力せよ。
問題の制約から、Q×Nのループで実装すればいけそうと判断。
処理を整理するのに手こずりました。
30分ほどかかってAC。
N,K,Q=list(map(int,input().split()))
A=list(map(int,input().split()))
L=list(map(int,input().split()))
S=[0]*(N+1)
for i in A:
S[i]+=1
#print(S)
for i in range(Q):
cnt=0
for j in range(N):
if S[j]==1:
cnt+=1
if cnt==L[i]:
if S[j+1]!=1:
S[j+1]=1
S[j]=0
else:
continue
#print(S)
#ary1 = np.array(S)
T=[i for i in range(N+1) if S[i]==1]
print(*T)
Robot Takahashi
N人の人がいて、N人は子供か大人である。
閾値Xを指定して、子供か大人を判断する時、正しく判断した人数をf(X)とする。
f(X)の最大値を求めよ
残り時間はこの問題に取り組みました。
素直に全探索すると、TLEするので検索条件を絞る必要があります。
N*2となるループ以外に思いつかず、1時間近く考えましたがACできず無念。
感想
A,B問題をACすることができました。
2ACでパフォーマンスが381だったので、次回は茶色パフォーマンス以上を取ります。
来週学習すること
C、D問題以降も勝負できる様にするため、まずはAtCoder ProblemsでB問題を解いていきます。
その後は、DP、BFSなどのアルゴリズムの学習をします。
・AtCoder Problems