今年の2月に始めたAtCoderが, 2ヶ月と少しで緑レートに行くことが出来ました!
Rated ちょうど10回目の参加で現在はRating 867です。
##自己紹介
新高3です。プログラミングは, 2011年(8歳)にHTMLとHSPを少し触り始めたくらいで, 本格的なものはやってませんでした。2018年(16歳), Pythonをやり始めました。といっても, 本格的に学びはじめたのはAtCoderを始めた後です。それまでは, 2019年にPaizaのAランクを取ってから少し実用的にいじるくらいで, 何もしていませんでした。AtCoderに初めて参加してから、毎週欠かさずABCに参加してます。
##最初に学んだこと
-
print
関数,if
文,while
文,for
文, 重要な演算子 -
int
とstr
とlist
Pythonの超基本的な部分ですが, これを習得するだけでもABC完はできると思います。
#灰色 (1~4回)
最初の提出は,
a,b,c=map(int, input().split())
と書くべきところを,
a,b,c=map(int, input.split())
と書いてREになってました。かわいいですね。
https://atcoder.jp/contests/abc155/submissions/10155435
しかし, 昔学んだのが残ってるおかげで, 27分でC問題まで解くことができました。
##学んだこと
-
map
関数とlist
関数。これは, AtCoder初回参加前に学んだので, 最初の提出で活用できました(REになったけど) - 演算子
//
。もちろん/
のあとにmath.floorを使っても実装できたが, これは本当に便利です - listの
sort
. これなんか, 基本の部分だけど実は知りませんでした - listの
max
,min
. 簡単に習得できました -
math.ceiling
.//
の便利さに惑わされて, 切り上げの実装のやり方を忘れてしまいました - mod.
10**9+7
は大好きな数になりました
##成果
155 27分56秒(誤答 1) ABC完 (Per 354)
156 27分54秒(誤答 1) ABC完 (Per 469)
157 32分07秒(誤答 0) ABC完 (Per 1093)
158 16分41秒(誤答 0) ABC完 (Per 635)
#茶色前半 (5~6回)
パナソニックプログラミングコンテスト2020で初めてD問題が解けました。
https://atcoder.jp/contests/panasonic2020/submissions/10879460
##学んだこと
-
join
関数。文字列をつなげるときに便利でした - 文字列操作を今更やりました
- 演算子
^
の少し. 0と1を交互に渡せることだけ学びました -
for
,while
を中断するbreak
. これ便利ですね。
##成果
Pan 77分35秒(誤答 7) ABCD完 (Per 1272)
159 50分27秒(誤答 1) ABCD完 (Per 868)
#茶色後半 (7~10回)
E問題が初めてとけました!この回のE問題は, 珍しく緑Diffだったらしいです。
https://atcoder.jp/contests/abc160/submissions/11311041
この位になると、緑も見えてきました
##学んだこと
- 謎の短縮化
print(["No","Yes"][if文])
これ大好きでよく使います -
[0 for _ in range(n)]
など, 簡単にリストを作る表記 - 逆に並び替える
[::-1]
. - だいたいの計算量が経験で分かるようになってきました
- 絶対値関数
abs
. - 含まれているかどうかを知る
in
.これはとても便利です。 -
Counter
.これなぜか速いです。(あまり試してませんけど) -
set
関数。大きいリストはset
にしてからin
を使うとlist
よりも圧倒的に速く探すことができる, というのを初めて知りました。(while文でinを使うときは, list型とは別にset型を作ると速い例)逆に,set
を使うと重複のないものを作ることができることもわかりました。 -
math.gcd
関数。最大公約数を求められるらしいです。 - bit全探索 本編で一回も使ったことないです
- 論理積, 論理和 bit全探索のついでに知りました
##成果
160 91分45秒(誤答 1) ABCDE完 (Per 1208)
161 19分45秒(誤答 1) ABC完 (Per 736)
162 90分46秒(誤答 4) ABC完 (Per 229)
163 30分37秒(誤答 1) ABCD完 (Unrated)
164 13分14秒(誤答 0) ABCD完 (Per 1775)
今回とてもいい成績が出ました!
#何で成長したか
競プロ初心者の自分にとっては同じ言語の他人のACしたコードを見て, その解説を考えるというのが一番成長に繋がったと思います。上級者の自然に考えたコードはAtCoderの教科書です。これからもこのやり方を続けようと思います。
##問題は何問といた?
Yukicoderで簡単な問題を数十問解きましたが, それはABの高速化に繋がったと思います。AtCoderの過去問はそんなに解いてません。
##AtCoderと数学
AtCoderと数学は密接な関係があります。もちろん数学が強ければAtCoderの成長も速くなることでしょう。特に, andとorの関係, 合同式, 十分条件や同値などは結構重要だと思いました。自分は同級生の中で数学力は平均よりやや高いと思うので, 結構AtCoderの数学問題に早く適応することができました。
##緑色になるまでどれだけの知識が必要?
プログラミング言語が自然に書けるようになったら, 緑色は目指せると思います。でも, D問題くらいの問題を解かなければ, ABC完で早解きしても緑色はかなり時間がかかるのではないかと思います。D問題はABCとは違って一気に難易度が上がるので, 解け切る人が結構少ないのでPerformanceもかなり変化します。よって, D問題に対処する力が付けば緑色は目指せると思います。
#次の目標
受験生なので勉強もやらないといけないですがAtCoderはまだしばらく続けるつもりです。もし目指すならレート1200です。そこまでいくのは緑と比べてかなり難しいので, 他の人のコードをいっぱい見て学ぼうと思います。