以下の内容はhttps://kumakumatime.hateblo.jp/entry/2024/12/23/232821より取得しました。


ICPC 攻略法:アジア地区横浜大会編

意外と書くことがない.

  • UC をたくさんやろう
  • オフライン練習も大事

はじめに

国内予選編の続きです.用語などもその記事と共通.

2024 年度のルール

詳細については公式ページを参照のこと.ここでは特に重要な点について述べる.

  • 問題数: 12 問
  • 制限時間: 5 時間
  • チーム人数: 3 人
  • ライブラリ: 紙媒体のみ可
  • インターネット: 使用不可
  • 全問同配点
  • 同点の場合,各問題に書けた時間の合計が小さい方が上位
  • 誤答 1 回につきペナルティ 20 分

昨年度からの変更点

  • 問題数増加 (11  \to 12)

練習

Universal Cup (UC) の登場により 5h ルールを練習できるセットがかなり増えた.Codeforces の Gym も使える (UC で出たコンテストと同じ内容だったりもする).できるだけ英語の解説や順位表があるものを選んでやるのが良い.

ライブラリ

(2024/12/27 追記)

  • 紙媒体しか持ち込めないため,ライブラリは写経に適したものを持って行く必要がある
    • kactl の pdf を印刷して持って行くのが定番
      • ICPC で写経することを前提としており,タイプ量の少なさと性能の良さの両方を考慮した実装となっている
      • マイナー知識も含め色々書いてあるので ICPC 関係なく便利.普通に知らないことが書いてあって勉強になる
      • github を見る限り 2024 年現在も更新されていそう
      • 余白が狭いため印刷時に端が見切れやすい
      • ぎゅうぎゅう詰めなのでフォントが小さい
      • 多種多様なアルゴリズムに対応しており,今までなくて困ったものは多項式演算 (逆元や exp など) くらいだろうか (FFT くらいならある)
      • 実装量削減のためか,インターフェースに癖があるものもある.基本的に pdf をよく読めば分かるようになっているが,以下の項目は事前に利用法を確認しておきたい
        • LazySegTree (抽象化されてない & ポインタで持つ実装)
        • LineContainer
        • MoQueries
        • hopcroftKarp/DFSMatching
        • SCC
        • 2sat
        • EulerWalk
        • MaximalCliques
        • HLD (可換しかない)
        • ConvexHull (凸包の辺上の点を除去してしまう)
    • その他にも過去の強豪チームなどが公開しているものがいくつかある

(追記終わり)

使用環境

  • 本番環境を再現した iso ファイルが事前に配布される
    • VirtualBox などで仮想環境を作成することで本番の環境を再現することができる
    • 各種アップデートにより iso ファイルが使えなくなることがあるので,その場合は運営に報告して直してもらう
  • OS, キーボード (US),エディタに慣れておく
    • 本番とほぼ同じ種類のキーボードは Amazon で数千円で買える.コンテストの賞品として貰ったアマギフで買おう! (ABC は抽選になっちゃったけど)
  • エディタは CLion が無難
    • VSCode とほとんど同じである VSCodium というエディタはある.しかしインターネット環境がないため拡張機能などが入れられず,補完やフォーマッティングが利かないため不便 (追記: 補完はあるらしい.フォーマッタについては不明)
    • コーダー全員が慣れているなら Vim, Emacs などでも良いかも
    • ICPC で提供されるエディタの中では,CLion が補完やフォーマッティングの機能を唯一持っている *1
    • CLion 自体は有料のエディタだが,それを提供している JetBrains 社が ICPC のスポンサーであるおかげで,大会本番では特別なライセンスを用いて利用することができる
      • JetBrains 社がスポンサーを降りた場合は…どうするか考えたくもない.いつもお世話になっております
    • 学生であれば 1 年間無料で JetBrains 社製品を使えるライセンスを入手でき,またそれは学生である限り更新することができる.練習の際にはそれを用いればよい
  • CLion のショートカットキーは独特なものが多く,慣れていないと苦労する
    • 使用頻度が高いため覚える or 再設定した方が良いのは以下の操作
      • ファイルを開く (Shift Shift or Ctrl + Shift + N)
      • ターミナルを開く (Alt + F12)
      • 設定を開く (Ctrl + Alt + S)
      • 行のコピー (Ctrl + D)
      • 下に改行 (Shift + Enter)
      • 行を上下に動かす (Ctrl + Shift + ↑/↓)
  • セーブは自動
  • セーブ時に自動でフォーマットする設定にする

リハーサル

  • 各種の仕様確認は PC に触る人間全員でやる
    • 時間にはかなり余裕があるのでゆっくりやればよい
  • 問題名やダウンロードするサンプル入力ファイルの名前は "A" ではなく "trialA" などとなっている
  • 順位システムについて確認しておく
    • CE を提出するとペナが付くか? \to 2024 年度は順位表に何も反映されなかった (未提出扱い)
    • 順位表凍結後に CE 提出をすると表示はどのようになるか? \to 2024 年度は提出数が 1 増加して表示されていた
      • 2024 年度での挙動を見たところ,凍結以前に AC していない問題への凍結後の提出については,凍結後に AC 済であったり CE であったりしても提出としてカウントされるらしい (これらはペナルティとしては可算されない)
  • 用意したスクリプトなどが正常に動作するかを重点的に確認する
  • インタラクティブ問題のテストを行うためのツールが支給されることがあるので,使い方を確認する
  • ゆっくりやっても時間が余るはず
    • スクリプトなどに修正が必要になったら,それを印刷することで翌日にも使える
    • 本番と同じ環境でライブラリの写経練習をするのも良い
    • あとの自己紹介タイムで何を言うか考える

コンテスト中の立ち回り

開始前/開始直後

  • やることが多く,必要な手順を飛ばしたりしやすいためこの部分だけでも練習する価値はある
  • パソコン担当が最初に行う作業は
    • PC ログイン
    • DOMJudge ログイン
    • 全問題のサンプル入出力をダウンロード
    • CLion 起動 \to 設定
    • .bashrc に書き足してターミナルで . .bashrc 実行
    • main.cpp にテンプレートを書きこむ
  • 環境構築の途中で A が解けても,テンプレートが不完全な状態で A を書き始めないことにしている
  • 将来的に SPJ の Github を公開してもっと詳しい内容を書くかも (書かないかも)

序盤 (開始から 90 分くらいまで)

  • 国内予選ほどではないが,ICPC ルールではあるため序盤のリードが保たれやすい
  • 前半の低難易度をペナなく速やかに終わらせることが重要
  • いったん全ての問題に目を通す
  • 英語問題文をある程度の速度で読めるようになっている必要はある
  • AB 以外にも簡単な問題はあるはずなので,解法が見えた問題でも実装が重ければいったん保留することはある
  • 5 時間あるので,20 分のペナルティは相対的には軽いものになっている
  • たくさんの問題を読む必要があるため,国内予選のときとは違い序盤でも担当する問題が分散することになる
  • 情報が少ないうちは順位表の確認を怠らない
  • 英語なので誤読が起こりやすい.問題を各自で読むか 1 人が口頭で伝えるかの判断は慎重に行う
    • 概要を聞いた問題でも,解けないと感じたら読み直すことも重要

中終盤

  • 多くの問題を通すことが必要な非常に苦しい状況でない限り,基本的に考察は 2 人以上でやる
  • 実装を 2 人以上でやるかは実装の複雑さで決める
  • 残り 80 分くらいの段階からは 3 人で 1 問に集中することも考え始める
    • ときには問題を捨てて他の問題の話を聞きに行く覚悟も必要
    • 並列で取り組んでどちらも通せずじまいで終わるのが最悪

デバッグ

  • 国内予選よりデバッグの機会は多く,チームの力量がかなり問われる
  • 1 人でやらない & やらせない
    • 解法を実装者だけが把握している場合でも,必ず他の人が応援に行って解法と実装内容を確認する
    • 他者の視点がある方がコードの欠陥に気付きやすいため
  • コード印刷も国内予選よりはやる機会が多い
    • 印刷クエリを投げてから紙が届くまでに時間がかかる
    • 通るか怪しいコードを投げたら判定を待たずに印刷
  • バグのあるコードを計算機を使ってデバッグするか,新しく解法が思いついた問題を書くかは難しい判断
    • 事前に ICPC Japan Problems などで実装が重めの問題を利用して実装時間を見積もる練習を行うのが良い.実装時間は大きな判断材料になる
  • 実装が爆発したときは方針ごと変えることも考える
    • この場合でも他の人と要相談

テクニック集

サンプル入出力の扱い

  • DOMjudge で Problemset のページからサンプルをダウンロードすると,それは ~/Downloads/samples-A.zip (A 問題の場合) に保存される.これを踏まえてファイルの解凍をするスクリプトも事前に用意する
    • リハーサルではファイル名が違うので適宜変える

コマンドなど

  • コンテスト開始時に簡単な bash スクリプトを実行しておくことで,よく行う操作をターミナル上の短いコマンドで済ませられるようにする
    • 特に以下の操作についてはコマンドを用意しておきたい
      • ソースファイルの生成
      • コードのコンパイル (コンパイルオプション付き)
      • サンプル入出力 zip ファイルの解凍
      • サンプル入力の実行
      • サンプル出力との差分確認
  • 次の年に使う頃にはコマンドなどはどうせ忘却しているので,ドキュメントを残しておく

オンサイトにおける注意事項

  • 以下の記事が参考になる. blue-jam.hatenablog.com
  • 1 日目に配られる T シャツ名札,および学生証を絶対に忘れない
  • 会場内は絶対に走るな
    • スタッフに強く制止されて注意されるので余計に時間を食う (マジですいませんでした)
    • 普段からコンテスト中に落ち着いて行動する癖を付けましょう
  • 飲食は PC のない方のテーブルで
    • 何かをこぼして PC が動かなくなると大変面倒.最悪続行できなくなる
    • そもそも競技中にあまり物を食うなという話.単純に時間のロス
  • 持ち込み可能かどうか明示されていなければ大体ダメだと思った方が良い.以下はダメだった例
    • 紙の資料を束ねるためのクリアファイル
    • 紙の資料を立たせることで写経しやすくするための書見台
      • なお,モニタにテープで紙を貼り付けるのも禁止されていた
  • 遅刻すると失格になることがある
    • 本番は朝早くからやるので注意
  • 競技開始が早まることがよくある

    • ギリギリに入場すると心の準備の時間が十分取れないかもしれず,良くない
    • アナウンスはちゃんと聞く
  • ホテル

    • 8, 9 月ごろには日程が分かっているはずなので,分かり次第取る
      • 土曜の横浜のホテルは値段が高いしすぐ予約で埋まる
    • 東京在住でも家が会場から十分に遠い場合は宿泊費の補助がある場合がある
  • 参加記

    • 読むの面白いので書いてほしい
    • タイトルに所属チームと筆者の名前を書いておくと他者から共有された際に既読判定がしやすい

*1:という認識.VSCodium と CLion 以外で確認したわけではないので,他にもあれば補足をお願いします




以上の内容はhttps://kumakumatime.hateblo.jp/entry/2024/12/23/232821より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14