遭難者です。ARC115でに青色になったので記事を書くことにしました。
緑色に4ヶ月程度いたのに水色には1ヶ月もいないのは春休み中毎日競プロと数学しかしていなかったからだと思います。
#自己紹介
現在高専1年の、情報系の学生です。
得意分野は数学とグラフ問題、苦手分野は文字列の操作とデータ構造、DP等です。
学校の授業でJavaを扱っていたということもあり、競プロをJavaで始めました。
#精進量
画像の通りです。
#アドバイス的ななにか
青色になりたい!という人(特にJavaを使っている人向け)へのアドバイスをまとめます。
クラスを使えるようにする
ありがたいことにJavaには有志の方々が作ってくださったACL for Javaがあり、これを貼り付けるだけで様々な機能が使えます。特に高速入出力は全ての問題に使え、実行時間とデータ使用量を大幅に減らせます。私はまだACL for Javaの全てが使えるわけではありませんが、頻繁にコンテストに出るクラスは使えるようにしました。また、クラスを使えるようにするだけでなく、内部でどのようなことをしているのかも理解できるようにしました。内部を理解できるとそのクラスをより快適なものにすることができます。
他人のコードを読む
Javaには様々な機能があります(何もJavaに限った話ではありませんが)。例えば任意の $0<i\le n$ を満たす $i$ について $a[i]=i$ を満たす 配列 $a$ を作りたい時、for文を使って
for(int i = 0; i < n; i++){
a[i] = i;
}
という風に書けます。しかし、setAllを使うと
Arrays.setAll(a, i -> i);
という風にスッキリと書けます。他人のコードが各行で何をしているのかを覗いてみると意外な成果があるかもしれません。
早解きを心がける
コンテストには崖が存在することがよくあります。例えば茶-緑-黄-橙-橙-銅のようなセットの場合、水色程度の実力では2問の勝負になります(3問目以降も解ける人は居ますが)。そういった時に大事になってくるのは如何に早く解けるか、如何にペナを出さないでACできるかになります。早解きは自分より1色以上下の問題を素早く解ける程度にするべきだと思います(1色以上下でも解けないものは解けないので、そういった問題は解説ACをすることをお勧めします)。
Streakを無理に繋げない
気が向いていないときに無理に競プロをするのは苦痛になるのでやめたほうがいいです。気分ではない時は休み、気分が乗ったらたくさん問題を解き勉強する、といった感じで競プロを楽しむことが一番です。
#Javaのメリット
多倍長整数が使える
AtCoderでは多倍長整数が使えないと解けないような問題はまず出ません。しかし、ABC169-Bのように多倍長整数が使えると実装が楽になる・正攻法が思いつかなくてもなんとかなるケースは少なくないです。
速い
速いです。C++ほどではありませんが、それでも速いです。TL2sのところを1990msで通したりするとJavaで良かったなと感じます。
#Javaのデメリット
JOI本選で使えない
JOI本選ではCとC++しか使えません。公平性を期すためらしいですが、なんとかなって欲しいものです。パソコン甲子園では使えるのがせめてもの救いです。
#今後の目標
水色になりたい!という思いと共に競技プログラミングを始めたのですが、目標を大幅に超えてしまいました。
青色になったので4つほど目標を立てます。
黄色になる
ユーザー解説を書いてみたいからです。実装例にJavaを入れたいです。
JOI・PCK本選に出場する
JOIは精進あるのみです。幸い同校の友人が競プロに興味を持ってくれたので、その友人と共にPCK本選を目指していきます。
苦手分野を克服する
苦手分野は下手すると茶diffも解けないかもしれません。そういった問題を重点的に解いていくことにします。
開発に参加する
情報系の学生とはいえ競プロのスキル単体ではあまり役にたたないと思っているので、競プロのスキルを生かせる方向に持っていきたいです。
以上の4つの目標ですが、今年中には達成したいです。
最後まで読んでいただき、ありがとうございました。