ntk log ntk

競プロや非競技プロのやったことを書いています.

AHC001 参加記

AtCoder Heuristic Contest 001に参加した!技育祭でchokudaiさんが「ヒューリスティックスコンは自分の書いたプログラムを育てるのが楽しい」のようなことを言っていたけれど、かなり実感した。

atcoder.jp

一週間のうち、最初の3日と最終日にがっつり取り組んだ。ICPC模擬地区があったり、技育祭が三日間あったりで取り組んでない時間のが長かった。

f:id:ntk_ta01:20210314222150p:plain

システス前46,877,146,209点で431位。

やったこと

Introduction to Heuristics Contestの解説がRustだったので、Rustで自分も取り組んだ。vis.rsからscoreやintersectをそのまま持ってこれたりして楽だった。

一日目

  • 1*1の正方形を作る 823090点
  • 外周までの距離で各長方形をソートしてから、各長方形を他の長方形と交差しないように拡大 453億点

二日目

  • 局所探索法を書く 目標面積より小さい長方形(公式ビジュアライザにおいてより青いものから)を拡大する 交差したらほかの長方形を縮小 456億点

三日目

  • 焼きなまし法を書く 456億点
  • 適当に長方形を選んで縮小する近傍を増やす

最終日

  • 縮小する近傍を減らす
  • バグがあったので直す 468億点

自分の提出↓

https://atcoder.jp/contests/ahc001/submissions?f.User=ntk_ta01atcoder.jp

あとは、グラフを書いたり

f:id:ntk_ta01:20210314212534p:plain

焼きなまし法実装直後は解が全然動いてなくて困惑した)

f:id:ntk_ta01:20210314212601p:plain

(終盤はちゃんと動くようにグラフを見ながら温度いじってた)

GitHub(private)にコードとメモ上げたりしてた。最終日に改めて取り組むときに何やってたっけ?を思い出せてよかった。けれどやっぱりまだ使い方がちゃんとわかってない。

github.com

コンテスト終了直後、TLに大量に知見が流れていたのでまとめていきたい↓。

自分用人々の知見まとめ

hakomoさん

多スタートと山登り。なんか近傍で賢いことしてそう。

TERRYさん

※後日参加記を書くとのこと

長方形を破壊するみたいな発想出なかったな。最大長方形問題ってなに…?ビジュアライザが動くと楽しい(それぞれ途中結果を出力してパラパラ漫画的に作ってるらしい)。

TERRYさんによる初心者向け解説

www.terry-u16.net

めちゃくちゃ丁寧で参考になる。Tipsまで全部読むべき。さらに参加記も書くそうで…すごいな…。

takumiさん

※後日参加記を書くとのこと

ペナルティをつける、みたいなのやったことない(自分は重なりを許さないような実装をしました)。

じろうさん

shuu0914.hatenablog.com

自分も平行移動みたいなことをしたかったのだけれど、実装できなかった。引力?を発生させるみたいなのすごい。

さはらさん

知らないTree出てきた。自分は膨らませる近傍しか最終的に実装できなかったけれど、人々はいろいろな近傍を作っていてすごい。あと今回みたいな局所解にハマりやすい感じ(これ問題の性質ではなく自分の実力のせいだったりしますか?)だと多点スタートがやっぱり強そう。

ymatsux ACさん

考えてることとしてはこういうことがやりたかった。空白地帯を使ったり、ランダムな変形をいれるなどができなかったな。

可視化大事だな~~と感じたあたりまとめ

次回はこういうの作りたいな。

iwashiさん

iwashi31.hatenablog.com

序盤の順位表から考えたことやスコアの伸びた/伸びなかった方法など、かなり細かく一週間何をしていたか書かれていてめちゃくちゃ参考になる。

optさん

optさんだけ違う問題を解いているかのよう……。

ウォンバットさん

こういう方針もあるんだ、という気持ちに。

binさん

縮小や破壊、実装できずにちゃんとわかってなかったのでこういうことなのかやってみよう~~~と思った。


人々の知見が多すぎてまとめきれてない。Twitterの#AHC001 タグももうちょっと漁りたい。

次のAHC002も楽しむぞ~~~