水色コーダーを目指す取り組みをしてきました。
期間は2022年3月から、9月20日までの半年としてきました。
結果は407(茶色)で終わりました。
悔しいので、3ヶ月の延長戦を設定して続けることにしました。
今週学習したこと
・特になし
@e869120さんの記事の分野別学習記録
レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】
基本アルゴリズム12個を学ぶと良いようです。
各記事ボリュームがありますが、まずは12個基本を押さえます。
全探索 | 二分探索 | 深さ優先探索 (DFS) | 幅優先探索 (BFS) |
動的計画法 (DP) | ダイクストラ法 | ワーシャルフロイド法 | クラスカル法 |
高速な素数判定法 | べき乗を高速に計算する手法 | 逆元を計算する手法 | 累積和 |
筆者の学習歴
学習歴はこんな感じです。
・利用言語はPython3
・Pythonの利用は業務で少し
・学習は「みんなのPython」を読んだくらい
・ABCコンテストには数回参加した(解けるのは1〜2問)
競プロではC++を使う方が多いかと思いますが、筆者はPythonのシンプルさに感動したためPythonで取り組みます。
毎週のAtCoder Beginner Contest(ABC)をペースメーカーにしていきます。
今週のコンテスト
ABC269
ABCに参加してきました。
3問AC、茶色パフォーマンスでした。
A、B、C問題は解くことができましたた。
AC:3問
パフォーマンス:569
レーティング:384→404(+20)
段級位:8級
茶色に復帰しました
結果
Anyway Takahashi
与えられる4つの数字の計算結果と、’Takahashi’を出力せよ
1分13秒時点(所要時間1分13秒)でACしました。
この問題は簡単なので、タイムアタック感覚で早く提出することを意識しました。
a,b,c,d=map(int, input().split())
print((a+b)*(c-d))
print('Takahashi')
Rectangle Detection
長方形のグリッドが与えられる。
グリッド内部にある長方形######の位置を求めよ
17分05秒時点(所要時間15分52秒)でACしました。
グリッドは100マスなので、全探索して”#”が見つかった場所のx座標、y座標を集合X、Yに追加します。
最後にX、Yの最小・最大値を出力して完成です。
この問題はもう少し早く解くこともできたかと思います。(10分くらいで解きたかった)
a = [input() for l in range(10)]
X=set()
Y=set()
for i in range(10):
for j in range(10):
if a[i][j]=='#':
X.add(i)
Y.add(j)
sortX=sorted(list(X))
sortY=sorted(list(Y))
#print(sortX)
#print(sortY)
print(sortX[0]+1,' ', sortX[len(sortX)-1]+1)
print(sortY[0]+1,' ', sortY[len(sortY)-1]+1)
Submask
非負整数Nの部分集合の数値を全て出力せよ
60分05秒時点(所要時間43分)でACしました。
制約が厳しく、Nは2^60までありうるのでNの全探索をするとTLEします。
この問題はbit全探索すべきとわかりますが、処理に時間がかかりました。
演算子「&」を使って部分集合を求めています。
M=int(input())
R = [0]
v = (-1) & M
#print(v)
while v:
R.append(v)
v = (v - 1) & M
R.sort()
#print(R)
for i in R:
print(i)
Do use Hexagon Grid
6角形のグリッドが幾つの連結部分を成すか出力せよ
残り時間はこの問題に取り組みましたが、解答を提出できませんでした。
BFSかもとは思いましたが、実装力不足でした。
次の目標
目標:緑色パフォーマンスを出せるようにする
緑色昇級のため、目標を整理しました。
・A・B問題を高速で解く(理想5〜10分以内)
・C・D問題をどちらかあるいは両方解く
安定して茶色パフォーマンスを出し、できれば緑色パフォーマンスを目指します。
今度こそ水色を目指します。