こんにちは。kaageです。
ABC151-AのFA(First AC)を取りました。僕には、ABC146,ABC151と2度のFA経験があります。(ほんとは多分3回あるんですが、いつのABCか忘れました)あと、Second ACは5回くらい取ってます。ちなみに、この時はほぼ毎回うしさんに負けています。
さて、一つの問題のACを世界で一番早く取る、という行為は非常に気持ちいいものです。
そこで、自分がいつも心がけている素早い提出のコツを記事にしようと思います。
ここはこの記事を通して強調しておきたいのですが、FAを取るのは初心者にも、決して難しくありません。
FA争いの基本
FAが取られる時間は、大抵の場合次のようになることが多いです。
・2行や3行で実装が終わり、if文なども使わない場合、20秒弱。
・if文を2-3回使い、条件が非常に単純な場合(整数の定数倍と、他の整数の大小を比較する、など)、30秒程度。
・面倒な場合分けをさせられる場合(7つの曜日を文字列で場合分けする場合などがあります)、1分弱。
ここで、一番初心者でもFAが狙いやすいのは、一番上の、2行や3行で実装が終わる場合です。
他の場合は、1度でもタイプミスをしたりしたら負けも同然なので、慣れていないとかなり厳しいです。自分も、このような場合にFAを取ったことはありません。このような場合は、FAを取りに行くよりサンプルをきちんと通してペナルティを極力出さない努力をしたほうがいいかもしれません。
FAを取るためにすること
コンテスト前
エディタを開いておきましょう。これは当たり前です。
また、エディタを開いたら、コードを書き始めるところまでカーソルを持ってきておきましょう。
C系の言語ならmain関数の中、Pythonならimportなどやライブラリが終わったすぐ下、という具合です。
コーディングをしたいときにカーソルを動かす時間は決して馬鹿になりません。最悪2秒くらいはかかってしまうでしょう。1秒単位で争われるFAの世界で、この2秒が命取りになります。
また、これはFAを狙っていなくてもする人は多いと思うのですが、A問題のURLを先に打って、そのページを開いておきましょう。当然、コンテスト前は問題を見られませんが、コンテスト開始直後にページを更新すれば、一切のタイムロスなしで問題が見られます。
もうひとつ言っておくとすると、コンテスト1分前から、質問タブを利用することで問題名が見られるようになります。これを利用して問題をエスパーするのもひとつの手ですが、コンテスト前1分は、少なくとも自分の場合は、落ち着くなり精神統一するなりしたほうが有益には違いないです。
コンテスト開始時
ABC151-Aを例に解説します。
まず、上で述べたように、開始5秒前くらいからF5キーを連打するなどして、開始と同時に問題を閲覧します。ここまでで2秒とします。
問題が目に入ってからエディタでの実装に入るまでの猶予は、多くて3秒と思ってください。実際、上に挙げた問題は非常に単純です。目全体で文章を捉えれば、趣旨を理解するのは一瞬で終わるはずです。問題を見て、ウィンドウを切り替え、エディタ画面でキーボードの上に指が載るまででどれだけ多くても3.5秒は切ってほしいです。逆に、これが切れないとFAは結構絶望的になります。
また、これは個人の好みが分かれると思いますが、変数を先に定義しておいて変数定義を書く手間を省略する、という戦法もあるらしいです。
ただ、問題点として、問題文中の変数と名前が異なる場合に混乱しやすい、というのが考えられます。( @e869120 さんに教えていただきました、ありがとうございます。)
コーディング
さて、ついにコーディングに入ります。しかし、ここまでしっかり準備をしておけば、多少のコーディングの速度の差で勝敗が決することはあまりないでしょう。
実際に、自分のFA提出を書くのに、少なくとも8秒はかかっています。赤コーダーなどの方々と比べれば決して早くはありませんが、これでも多少の余裕をもってFAが取れるのです。
タイプミスだけはなるべくしないようにしたいところですが、してしまったら仕方ないです。諦めずになるべく早くリカバーするようにするのみです。
提出
さて、コーディングが終わったらいよいよ提出です。
意外かもしれませんが、自分は、自動提出をするコマンドツールなどは一切使っていません。使ってもいいとは思うのですが、気に入ったエディタを離れたくないというのと、コマンドラインが起動するまでに最大1秒程度のラグは存在し、これはどうにもならないというのを理由に使っていません。ブラウザからフォームにコピペして素直に提出しています。
では、どうすればブラウザからでも素早い提出が可能になるのでしょうか。答えはただ一つ。コレです。
Osmium_1008氏(実は僕の同期です)が作った、AtCoderの提出ボタンをCtrl+Enterで代わりにクリックできるスクリプトです。なんのことはない、と思うかもしれませんが、これ、死ぬほど便利です。
マラソン課題でN分間の提出制限がうっとうしいとき、画面をスクロールするのが面倒なとき、…。
いつでも使えるうえ、FAを取るのには欠かせないツールです。ぜひみなさん自分のブラウザに導入しましょう。Osmiumくんに感謝感謝。
これを使えば長くても2秒で提出ができます。
ここまでで2+3.5+8+2=15.5秒。今回の自分のFAは16秒なので、提出がサーバーまで届く時間を考えても、これくらいが基本的な動きだとわかるでしょう。
提出後
提出後することは特にありません。(当たり前)
ジャッジを待っている間に次の問題の考察なり実装なりに移るのが得策でしょう。
ジャッジ結果を早く見たい、という方のためにChrome拡張のこちらも紹介しておきます。
Comfortable AtCoder
こちらはdrafearさんの作ってくださった拡張機能で、ジャッジ結果をポップアップで表示してくれるので、コーディング中などでも前の提出の結果が見られます。便利ですね。他にもいろいろ機能があります。FAにはあまり関係ないですがあまりにも便利なので紹介しました。
おわりに
みなさん楽しいFAライフを!!!