Skip to content

Instantly share code, notes, and snippets.

@foldori
Last active October 14, 2015 15:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save foldori/6bf4277ab0b0767944f6 to your computer and use it in GitHub Desktop.
Save foldori/6bf4277ab0b0767944f6 to your computer and use it in GitHub Desktop.
第26回全国高専プログラミングコンテストに参加しました.

プロコン行ってきたので参加記を書こうと思います。(こういうの書いたことが無い)
豊橋技科大チームとして、NAPROK枠で参加しました。メンバーは

  • @foldori(僕)
  • @arukuka
  • @hysy__
  • @shadow_jp(都合により本番には不参加)

で、助っ人として先輩方

  • @k3_kaimu
  • @tanutarou730

にも来て頂きました。ありがとうございます。

自分は某高専の情報科出身で、プロコン参加は今回で5回目(競技に限れば4回目)となります。
去年で最後だと思ってたんですが、今年もなんだかんだで出ることになりました。
過去の参加経験を活かして(活かせたとは言っていない)ソルバ書きました。

プログラムの解説はこちらにhttps://github.com/tut-cc/DiceTilingMeu

チーム名は「サイコロしきつめう」です。どうしてこうなった。

当日までの流れはこんな感じでした。

4月

去年に引き続き豊橋技科大チームでプロコンに出よう、ということでプロコン参加を決意。 問題を一通り読んでみて、まあビームサーチだろうとか評価関数どんなのが良いんだろうとか
考えつつも、しばらくの間ICPCなど競プロに手を出してました。

9月ぐらい

ICPC予選が終わってから本格的に着手し始めました。
Visual StudioでC++の開発するのが2年ぶりぐらいだったり、Gitの使い方忘れてたりで中々はかどらず、
気がついたら夏休みに突入してました。しかしJAGの夏合宿に参加したりで忙しく、いつの間にか9月後半の夏合宿直前に。

合宿にて、石の配置可否判定のbit演算による実装と、コード分析により改善点の洗い出しを行いました。 この時点でメンバー間のルールの解釈ミスが発覚し、@arukuka氏のアルゴリズムがかなり強化されました。

10月

合宿終了時点で、プロコン本番まで3週間を切っており、流石に焦ってきて実装頑張ってました。 具体的には石を置いた位置の履歴を木構造で保存するように変更したり、評価関数をビット演算で計算したり・・・

10月9日木曜日

翌日が技科大祭の準備で休みのため、大学にて徹夜で開発。この日の夕方~翌日の朝にかけての進捗が非常に大きかったです。 OpenMPによる高速化を改良し、キューと評価関数にランダム要素を取り入れて解の多様化を図ってみました。 しかし練習場のproblem37に対してあまり良い解が出ない… そこで他の問題を解いてみたところ、なんとすばらしく良い解が。 どうやら、障害物が多く、複雑な形状である場合にこのアルゴリズムは強いらしいと判明。 結局、障害物の多い問題に特化したアルゴリズムとなりました。

11日土曜日

金曜日は開発を行わずに体調を整えることに専念し、昼前ごろ豊橋を出発。 今回はあまり遠くなかったです(一昨年は本州の端から北海道とめちゃくちゃ遠かったですが)

夕食は信州そばを食べました。七味をどさっと入れてしまうハプニングを除けばとても美味しかったです。 あと店員さんが高専のOBだったりしました。

ホテルで開発を開始。この時点でPC同士の通信がまったく出来ていなかったため、@k3_kaimu先輩と@arukuka氏に 夜を徹して作業していただき、何とかPC同士で通信して解を自動送信できるように。 自分は行きの列車内で考えたアルゴリズムを書いてましたが、解が大して良くならなさそうだと分かったので没になりました。
結局、自分のプログラムを通信可能なように改良と、動作確認がしやすいよう少しいじっただけでした。

12日日曜日

予行演習から全力出してました。動くかどうか不安でしたがちゃんと良い解が出せたので一安心。
しかし予行演習で既に最大サイズの問題が出るとは・・・と少し不安に。結局チーム内では自分のアルゴリズムが 一番強かったため、もし苦手な問題が出たらまずいなと思いつつも、そこそこ複雑な問題がでるっぽいし大丈夫かなと思ってました。

先輩に頼まれてたプロコンOSTを購入。自分は視聴用と保存・布教用で2つ買いました。

ホテルに戻ってからは解の精度を上げるべく作業。しかしどうにも改善できず翌日に。

13日月曜日

危うく二度寝して寝過ごすところでした。 会場入りしてからは敗者復活戦を観つつプログラムの動作をチェック。問題のGETは正常に行えることを確認してから準決勝へ。

準決勝1問目は「寺」で、障害物がかなり多くそれなりのスコアを出せました。しかし、ここで重大な問題が。 どうやら、ローカルで保存する回答ファイルの名前の変更を反映し忘れていたらしく、解の送信が自動で出来ないという事態に。 結局、よさげな解を手動で提出しVisual Studioを立ち上げてプログラムを修正しました。

準決勝2問目はまたもやサイコロ。が、予選と違って空白マスが非常に広いです。 案の定まともな解が出せず(スコア70程度だった)、@k3_kaimu先輩と@arukuka氏のアルゴリズムによる解に頼ることに。 しかし2問目突破には後一歩及ばず、準決勝敗退という結果でした。

決勝戦の問題は長野高専の校章。(だっけ?)
障害物がかなり複雑に配置された、自分のプログラムが得意とするタイプの問題だったので挑戦してみたかったです。
あと決勝戦のBGMかっこよすぎ。ダウンロードはよ(バンバン

プロコンを終えて

感想など。 今年の競技部門の鍵は、「得意な問題が異なるアルゴリズムを複数用意する」というところに あったのかなあと思います。 プロコン競技には毎年、「ここが出来ているチームは強い」みたいなコツ、というかポイントみたいなものがあるなあ、と。 今回のメンバーの中でプロコン参加回数が一番多いのは僕なので、過去の経験をもっと開発に活かせればよかったかなと思います。

来年のプロコンについては、今のところ参加は未定です。が、問題が面白そうだったらたぶん参加します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment