SuperComputingContestって何
・プログラミングコンテスト
・2ないし3人のチームで出場
・本戦のみスーパーコンピューターを使える
最終的なアルゴリズム
(擬似コードで)
入力を受け取る
一旦Noを出力する
命令を長さ順にソートする
上下移動のみで到達可能なマスをBFSにより調べる
(1,1)を調査されていないマスにする
調査されていないマスがある間:
最古の「調査されていないマス」から行き着けるマスを調べる。このときに使用した命令を記憶する。
すべてのマスに息つけることがわかったらYESを出力。
※命令ごとの移動量は前処理している
やったこと
6/2
問題を読んだ。集まって話し合った。
・命令の長さでソートしたほうがいいよね
・命令ごとの移動量は前計算できるよね
このあたりの基本的な工夫はこの段階で決まっていた
正直言って難易度が高くて結構焦った
話し合った内容はこんな感じ→
6/3
単純な答え(通称:ツバメ)を思いついた
6/5
ツバメの実装が終わった。
ツバメが間違っていることに気づいた。
愚直解(通称:カワセミ)を思いついた。
ビジュアライザを試作した。
6/8
カワセミの実装が終わった
6/9
ツバメのバグを直したアルゴリズム(通称:セグロセキレイ)を思いついた。
6/10
ビームサーチによるアルゴリズム(通称:シジュウカラ)を思いついた。
シジュウカラの実装はチームメンバーに任せることにした
6/16
シジュウカラの実装がうまく行かず、諦めた
カワセミの一部を改良した
6/17
アルゴリズムの説明文書などを作って提出した
結構ぎりぎりになった
6/18
多分落ちたなーという気分になった
6/23
予選通過のお知らせみたいなのが来てめっちゃびっくりした
考えたアルゴリズムの擬似コードは次のリンクからご覧になれます→https://drive.google.com/drive/folders/1ebPZNWQOtX7n_rLIHygn0foE0axf2QHA?usp=sharing
メモ書き
・アルゴリズムが増えて区別が大変だったので鳥の名前をつけた(結構良かった)
・基本WandboxとOnline GDBを使った 良い子は真面目に環境構築しましょう
・なんで本戦の実行環境macなの
反省
結局シジュウカラの実装が間に合わなくて辛かった。
仮にシジュウカラの実装ができたとしても実行時間制限的にカツカツだった可能性高かった気はする
情報オリンピックとかと違って並列化が理論上可能なので、試してみてもいいかもしれない
※情報オリンピックは制限時間が「実時間とCPU時間(=コアごとの延べ時間)の長い方が○秒以内」とかなので並列化しても並列化した分だけ制限時間が短くなるので意味がない
ビジュアライザについて
なれているというだけの理由でHSPっていう言語を使った
正直かんたんに書ける言語なら何でもいいと思う 最近Rust流行ってる気がするけどWebAssemblyとか面倒くさくない?しらんけど
個人的にはVBAとかGAS(どちらも表計算のマクロ)なら他の場面でも効くし割と楽なので一番ベストな気がする
身内で数週間使うだけなので、わかればそれでいいと思う
すべての問題でビジュアライザが作れるわけではないけど作れるなら作ったほうがいいと思う
(今回はアルゴリズムを改良する余裕がなかったのであんまり役に立たなかった)
まとめ
・アルゴリズム考える人と実装する人は分けないほうがいい
・メインでアルゴリズム書く人+ビジュアライザ専門+アルゴリズムに口突っ込む人、が一番理想な気がする
・14日あるとして、理想的な分割はこんな感じ?
1日目 問題把握
2日目 原始アルゴリズム作成+ビジュアライザ作成+取れるパラメータの検討とか前処理の検討とか
4日目 アルゴリズムを全員がバラバラに作る
7日目 ベースとなるアルゴリズムを決める
8日目 アルゴリズムの改良の余地を考える 一人ぐらい並列化とかする人がいてもいいかも
11日目 パラメータ調整+文書作成
13日目 提出
コンテストの運営の皆さん、協力してくれた先生には感謝しかないです。ありがとうございました。