Skip to the content.

cyan が AtCoder で cyan になるまで

目次

この記事に書いてあること

レートのグラフを見ればわかる通り、2021年の夏から2023年の頭までコンテストに出てませんでした。精進もほぼしておらず、実質休止期間です。

復帰して以降 について、

を書きます。ちなみに 言語は C++ を使っています。

なんで休止以前を省くかって言うと、あんま意味なさそうだからです。

この辺も別の記事でそのうち話せればと思いますが、2021年に入緑しているものの、大した知識はなかったです。

覚えている範囲だと、学んでいたのは BFS、DFS、二分探索、尺取法、imos法、ダイクストラ法 とかそんな感じだったと思います。学んでいたと言っても、触れたことがある程度だったと思います。

difficultyが年間50くらい厳しくなってるという話もあるらしく、休止前の話はレベル感を考えてもあまりアテにできないかなと思っております。緑になれたのも、ABC-C までの早解きがそこそこ得意だったからというだけですし。

そんなわけで、休止前の話はまた別の機会に。

環境の整備

コーディング環境

実は休止期間前までは AtCoder のコードテストしか使ってませんでした。復帰して1か月ぐらいでしたかね、なんとなく「プログラマとして飯食ってるのに手元に環境構築もできないのヤバくないか?」という不安もあり、ローカル環境の整備をしようということになりました。具体的にやったことは、

です。

構築に当たっては こちら に大変お世話になりました。コンピュータへの理解よわよわマンとしては1から10まで説明してくれるこの記事が非常にわかりやすくありがたかった記憶があります(それでもトラブってある程度手間取りましたが……)。

breakpoint を用いた debug は業プロでもよくやりますし、これできるようになったのが一番嬉しかったかもしれないですね。あとはシンタックスハイライトとか、インデントの設定できるとか、補完が効くとか、まあそんなぐらいです。

ブラウザ プラグイン

AtCoder Easy Testac-predictor を入れました。

前者に関しては atcoder-tools とか atcoder-cli & online-judge-tools を使ってもいいのでしょうけど、現状がそこそこ快適なのでなおざりにしております……

テンプレート整備

休止前は

#include <bits/stdc++.h>
using namespace std;

しか使っていませんでした。

今は

#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll = long long;
using mint = modint998244353;
const int INF = 1001001001;
const ll LINF = 3001001001001001001;
const int MOD = 998244353;
#define reps(i, a, n) for (ll i = (a); i < (ll)(n); ++i)
#define rep(i, n) reps(i, 0, n)
#define all(a) (a).begin(), (a).end()
template<typename T> bool chmin(T& a, T b){if(a > b){a = b; return true;} return false;}
template<typename T> bool chmax(T& a, T b){if(a < b){a = b; return true;} return false;}
template <typename T> istream &operator>>(istream &is, vector<T> &v) {for (T &in : v)is >> in;return is;}

を使ってます。llrep は特に使用頻度が高いです。

解いた問題

復帰後~入水までの間に解いた問題の内、difficulty が茶色以上のものを抽出しました。精進の指針の一端でも担えればと思います。

2023-03
2023-04
2023-05
2023-06
2023-07
2023-08
F. Cans and Openers
D. Money in Hand
D. 2-variable Function
C. Product and GCD
C. Stones
D. I Hate Non-integer Number
D. Nowhere P
C. Approximate Equalization 2
D. Odd or Even
D. Snuke Prime
C. Many Requirements
D. Index × A(Not Continuous ver.)
D. Yet Another Recursive Function
D. Do use hexagon grid
D. ±1 Operation 2
D. Takahashi Tour
D. Water Bottle
D. Rectangles
D. Freefall
D. Range Count Query
D. Count Interval
D. Longest X
D. Play Train
D. Querying Multiset
D. Number of Shortest paths
D. RGB Triplets
D. LOWER
D. Gathering Children
C. Dice Sum
C. Counting Squares
C. Ladder Takahashi
C. IPFL
E. Red Scarf
C. Matrix Reducing
E. Karuta
E. Akari
C. Snuke Festival
C. オセロ
C. Many Formulas
C. Strange Bank
C. Linear Approximation
D. String Equivalence
D. Lamp
E. Mex Min
D. Strange Lunchbox
E. Get Everything
E. Subtree K-th Max
D. Card Eater
C. 数列ゲーム
E. Amusement Park
A. 塗り絵
B. 解像度が低い。
A. 動く歩道
B. 謎のたこ焼きおじさん
C. 民族大移動
D. 乱数生成
C. 柱柱柱柱柱
C. 飛行機乗り
D. 画像処理高橋君
D. Integer Cards
C. GCD on Blackboard
D. Wall
D. バスと避けられない運命
D. 高橋くんと木の直径
C. 列
C. Daydream
C. Back and Forth
D. Enough Array
E. Prerequisites
C. スフィンクスのなぞなぞ
C. Boxes and Candies
C. Digits in Multiplication
C. Dubious Document 2
C. Bridge
D. Walk and Teleport
D. Transit Tree Path
D. Coloring Dominoes
D. joisino's travel
D. Binomial Coefficients
C. K-th Substring
D. Equals
D. 派閥
D. Make Them Even
D. Grid Repainting
D. Remainder Reminder
D. An Invisible Hand
C. One-stroke Path
C. Special Trains
D. 2017-like Number
C. Tsundoku
C. Remembering the Days
D. President
E. Avoid Eye Contact
D. KAIBUNsyo
E. MST + 1
C. Ideal Sheet
D. Unique Username
E. Erasing Vertices 2
D. Summer Vacation
C. Candles
D. Robot Arms 2
D. Circumferences
D. Partition
C. Pyramid
D. Distinct Trio
2023-09
2023-10
2023-11
2023-12
2024-01

精進で意識していたこと

前述の通り、解く速度に関してはそんなに課題を感じていなかったので、とにかく解ける問題を増やす方向で考えていました。方針が見えなくても、なんとなく思考が進む限り、どれだけ短くとも30分-1時間ほどは考えていたと思います。

特に適正 difficulty よりも高い問題の内、行けそうで行けない、でもちょっと行けそう、みたいな問題は数日間頭の中に置いておくこともありました。途中で、まったくどん詰まりになったら解説を見ます。

そのとき、解説に書いてある解法が頭をかすりもしていなかった場合、それを新たに武器として取り入れるだけなので、話は割と単純です。その解法に関する知識をggるなり何なりして、取り入れます。次回から考察時に選択肢として頭の片隅に置いておけるようになってさえいればよいです。

大変なのは、その解法が頭に一旦浮かんだにもかかわらず、その方針で詰めずに捨ててしまった場合です。なぜその方針を捨ててしまったのかを顧みる必要があります。ex. 計算量の見積りを間違えた、正当性の証明ができなかった、何となくダメそうだから捨てた、等々。

そしてその原因が、問題文の誤読や勘違いによるものであればまだいいのですが、アルゴリズムやデータ構造に関して何らかの勘違いをしていた場合、ちゃんと矯正する必要があります。これまたggるなり何なりして、当該アルゴリズム/データ構造のお気持ちをちゃんと理解する方向で頭を使います。

100% の理解が無理でも、最悪そのアルゴリズム/データ構造の各操作の計算量がいくつなのか/どのようなことが実現できるのかぐらいは理解するようにしてました。

学んだこと

アルゴリズム

他にもありそうな気がしますが、覚えてる範囲だとこれぐらいです。

実装手法

その他概念とか

ライブラリ化したもの

学んだアルゴリズムも踏まえて、手元にライブラリとして置いたものを紹介します。

他にも、BFS、DFS、めぐる式二分探索 なども一時期ライブラリ化していましたが、水色になる頃には何の苦労もなくその場で書けるようになっていたので、捨ててしまってました。

ACL で使えるようになったもの

AtCoder Library の中で使えるようになったものを紹介します。

学ばなかったこと

改めて文字に起こしてみると、知らないことだらけですね。「今のところ困ったことがない」と言っているものに関しては、単純に自分の精進不足も大いにあると思います……。

全然わからないもの

何ができるかなんとなく知ってるけど今のところできなくて困ったことがないもの

代替手段が存在して今のところ困ったことがないもの

学ぼうとしたけどわからなくて一旦諦めたもの

水色になった今、何をやっているか

特に変わったことをやっているわけでもないのですが、水 diff 埋めを積極的にやるようになりました。AtCoder Problems の heat map を見てみるとこんな感じです。

あと手元のライブラリが若干増えており、

あたりを窃盗しました。使うこと自体はそんなに多くないですが、持ってると貼るだけがたまに発生します。

おわり

良い締めが思いつかないです。青目指して?気長にがんばろうと思います。まあ、そんな感じです。
ありがとうございました。

ホームへ戻る