Pocalaメモ

アウトプット用のなにか

AtCoder緑になるまでにしたこと

先日、緑になることができました。コンテスト前に「緑になります」宣言をしていたけども、ギリギリだった…(危ない)
色が変わったので、これまでにしてきたことを覚えている範囲で書いていきます。

緑になるには

AtCoderで緑になるには、レートが800以上必要です。なので、コンテストで800以上のパフォーマンスを出していく必要があります。800を超えるパフォーマンスを出すには、「100点問題、200点問題を合わせて10分前後で解く」くらいのレベルが必要です。300点問題は解けても解けなくてもいいと思います。

自分がしたこと

ABC-A,Bの過去問埋めで実装力を増やす

基本的にB問題までは専門的なアルゴリズムの知識はあまり必要ないと思っています。あるとしてもfor文の全探索(全ての通りを試す)くらいです。自分はvectorを扱えるように頑張りました(string,pair,mapも使えると嬉しいかも)。どちらかといえば、この時期に必要なのは「元から入っている機能をどれだけ使えるか」みたいな所です。いちいちif(a > b)で分岐しなくてもmax(a,b)と書けるくらいの知識を、ググって調べるor他の人の解答を解読するなどしてつけておきましょう。よく使うものとしては、

などが挙げられます。インクリメント、mapとかも使えると嬉しい。

早解きをする

早解きは大切です。ABCなどは大体「Bまではまだ解けるけどC全く解ける気がしない」みたいな感じです(初心者から見ると)。なので結構な数の人たちがA,Bの2完であることが多いです。その多くの2完の人たちの中で順位を決めているのは、解くまでの時間です。C問題を解く力をつけるのもいいと思うのですが、A,Bを早解きする力を先につけておくことをおすすめします。個人的に、早解きをするには

  • コードを書く環境を整える
  • 実装に慣れる

の2つが大切だと思っています。

コードを書く環境を整える

自分の場合はAtomを使っていますが、スニペットという機能を使うことで、「cou」と打ってTabキーを押すと「cout << << endl;」が打てたりします。for文もすぐに打てます。よほどタイピングに自信がない限りは、補完機能を使ってください。あと、自動整形機能を使うとコードが読みやすくなります。コードが読みやすくなると、後でバグを探す時に便利です。実行環境も作れるなら作った方が早いです。
つまり、開発環境は大切です。時間がかかってもいいので、ググるか誰かに聞くかしながら、素早く実装ができる環境を作りましょう。

実装に慣れる
  • 変数宣言してない
  • vector v;の次にv[i]で代入してる
  • cout << hello << endl; [""付けていない]
  • if (a = b) [代入しちゃってる]
  • v[n] = 100; [コアダンプ(範囲外を参照)しちゃってる]
  • count = 0 [intが付いていない&セミコロン忘れ]
  • accumulate(v.begin(),v.end()); [引数が足りていない]

こういうミスをしてしまうと、時間をロスしてしまいます。過去問や色々を解いていき慣れることで、エラーを減らす&エラーが出てもすぐに直すことができるようになります。
エラー文を読みましょう。もしも意味が分からなかったら、文章をコピペして検索するか、Google翻訳にかけるか、それでもわからないなら誰かに聞くかしましょう。

まとめ

実際は自分は色々なアルゴリズム(DFS,BFS,imos法,bit全探索,DP,貪欲法…)みたいなのを勉強したのですが、今回の「AtCoderで緑になる方法」にはあまり必要ないと思ったので書きませんでした。まとめると、

  • AtCoder Beginner ContestのA,B問題を早く解く力をつける

のが一番緑になるのには良いと思います。いや自分既にできてるんだけど!?という人はC問題を時間内に解く方向に進んでいきましょう。

感想

次は水色を目指していきたいです。緑と水色の壁は厚そうですが、精進頑張ります!