この記事は2023年夏ブログリレー36日目の記事です
はじめに
はじめまして、Comaviusです。
私はいつもAtCoderで競技プログラミングをして遊んでおりまして、2種類のレートの積[1]は2179580
です。先日開催されたAHC024の成績が良かったため、調子に乗ってこの記事を書いている次第です。本稿ではAHC(AtCoder Heuristic Contest)の魅力を語ってまいりますので、一人でも多くの皆様に興味を持っていただければ幸いです。
AHCって何?
つい先程述べたとおり、AHCはAtCoder Heuristic Contestの略称です。1週間以上期間のある長期AHCと、4時間で決着がつく短期AHCの二種類に大別されます。AHCでは数学的に厳密な解を求めることが難しい問題に対して、「十分に良い」近似解を得ることを目標として、その近似解のスコアの大小を競います。近似解がどのようなものかよくわからない方は、選挙と世論調査の違いを思い浮かべていただくとよいと思います。
AHCのここがすごい!
簡単に"正解"を得ることができる
これが私の思うAHC最大の長所です。誰しも未経験の分野に飛び込んだ直後は何をしていいのかわからなくなるものですが、AHCでは明らかに成立する解をとても簡単に得ることができます。例として、AHC024では入力によって与えられたC
をそのまま出力すれば条件にあった解になりますし、AHC023にいたっては1 1 1 1 1
と出力するだけで事足ります。また、コンテストによっては運営からこのような自明な初期解を与えられることもあります。当然このような解はスコアが悪いのですが、今の自分にできる範囲で少しずつでも改善をしていくことで、得点が伸びただけ幸せな気分に浸ることができます。
何が起こっているのか把握しやすい
この記事をご覧のプログラマーの方は、人生で一度や二度原因のよくわからないバグに悩まされた経験をお持ちのことと思います。そんな皆様に朗報です。AHCでは運営から予めローカルテスト用のツールとビジュアライザが与えられます。これは入力と出力を貼り付けるだけで得点を計算し、さらに下のgifのように解を視覚的に表示してくれるすぐれもので、とても快適にプログラムを書くことができます。
前提知識が欠けていても戦える
これは最初に述べたことにも通じるのですが、AHCでは「このアルゴリズムを知らなかったから手も足も出なかった」というようなことは起こりずらいです。実際に上位の解法が複数あることも多いですし、特に長期AHCではコンテスト中に新しい概念を学ぶことすらできます。これが、これから競技プログラミングを始めようという方にもAHCをおすすめする理由です。
脱・純粋培養競プロer
長期AHCでは如何に快適な作業環境を作り上げ、そして可読性や再利用性の高いコードを書くかということも重要です。そして快適な環境をととのえるためにはエディタやbash周辺などを触る必要がありますし、コードの品質を高めるためにはクラス設計やエラー処理といった部分について考える必要があります。これらの競技プログラミングをしていると余り目につかない分野に触れる機会として、AHCはとても優れていると思います。
やる気になったあなたへ
さて、ここまで読み進んだ皆様におかれましては、きっと「まあ参加してやってもいいよ」というような気分になっていらっしゃることでしょう。そこで、次回のコンテストが始まる前にできることを挙げていこうと思います。
1. 参加記を読む
早速ですが、お手元の端末で「AHC 参加記」と検索してみてください。そしてそのうちいくつかを開いてみましょう。すると、これまでにAHCに参加してきた方々がどのように考え、何をしたのかということがなんとなくつかめると思います。またトップ常連の方から初参加の方まで幅広い記事が揃っているため、初回特有の苦労から上位の解法の仕組みまで様々な知見を得ることができるでしょう。
2. 環境構築の方法を予習する
先にも述べましたが、AHCでは予めローカルテスト用のツールが提供されます。そして、このツールの使い方は毎回似たようなものとなっています。そのため、過去のコンテストで予習しておけば本番スムーズに事が運ぶことでしょう。
3. ABCに参加する
「前提知識が欠けていても戦える」とは申しましたが、一方で引き出しが多ければそれだけいろいろなことを試せるということもまた事実です。ABCに参加すればそれだけ経験値が増えますから、決して無駄にはならないでしょう。
4. 「参加登録」のボタンを押し、カレンダーに次のコンテストの日時を記入する
大事です。忘れてからでは遅いですから。
終わりに
いかがでしたか?
かくいう私も精進の道半ばでありまして、皆様とともに競技プログラミングを楽しむことができたらと思っております。
本稿が皆様のお役に立てれば幸いです。
明日はoriorituさんとKasyuさんです。お楽しみに。
アルゴリズムレーティングとヒューリスティックレーティング ↩︎