しがない元高専生の競プロ日記

AtCoderとかいろいろ解いてく

AtCoder Heuristic Contest 001に参加しました

atcoder.jp

参加しました。

初めてRustを書いたのですがめっちゃ怒ってくれるのでありがたいですね。

ラソンに関してはC++教から改宗してRust信者になります。

後作ったコードはここに置いときます。

github.com

概要

10000 * 10000の中に点がたくさんある。

各点を丁度1個含む長方形を点の数だけいい感じに作る。

各点にはこれくらいの面積が欲しいという指標があってその指標に近ければ近いほど点が高い。

結果

46G届いたやったね!

各提出ごとのメモ垂れ流し

初回提出

方針: 愚直に長方形を置くだけ

in: 76,402,184

judge: 1,466,059,961

place: 444

2回目提出

方針: 愚直に長方形を置くだけ+psが取れるなら確実にとる

in: 初回の10倍くらい(取り忘れ)

judge: TLE

place: ---

3回目提出

方針: 初期解をpsを囲む1*1の四角に変更(初期解生成を高速化), 四角を広げる/縮めるで得点を伸ばす方針に 愚直更新なので局所解で死ぬ

in: 608,209,485

judge: RE(なんで~~~~~~~)

place: ---

4回目提出

方針: index-out-of-rangeのバグを直した:angry_face:

in: 817,702,176

judge: RE(うるせ~~~~~~~~~しらね~~~~~~~)

place: ---

5回目提出

方針: index-out-of-rangeのバグを直した, やきなましをしようとした(うまく収束せず-1量産で一旦諦め)

in: 503,326,678

judge: RE(うるせ~~~~~~~~~しらね~~~~~~~)

place: ---

6回目提出

方針: run.shでin内全部回してバグを見つける。random generator嫌いになりそう

in: 613,761,431

judge: 30,512,002,092

place: 344

7回目提出

方針: pointの更新を1点にして高速化、焼きなまし(嘘)の遷移を消して山登りに

in: 654,662,382

judge: 30,512,002,092

place: 344

8回目提出

方針: 更新時の得点計算を高速化

in: 忘れ

judge: 37,853,983,860

place: 401

9回目提出

方針: 全く触られていなかった点に対して0.1秒かけてランダムを回し続けた。ダメ。

in: 702225411

judge: 37,266,198,805

place: 472

10回目提出

方針: 焼きなましをそれっぽくした&面積をいい感じにすべく縦を揃えたら横は面積以下になるようにして よしなにする

in: 773~778くらい

judge: 42,862,187,666

place: 401(順位が変わってない...:cry:)

10回目提出

方針: 四角を伸び縮みする方針に変更

in: 847,720,305

judge: 44,936,295,721

place: 354(点数はめっちゃ伸びたのに順位が伸びない...全人類強すぎる)

10回目提出

方針: 伸び縮みする幅を-10 ~ 10に変更

in: 847,720,305

judge: 45,014,611,474

place: 391(400点台を回避できてウレシイ...)

11回目提出

方針: 伸び縮みする幅を-25 ~ 25に変更, TLを4.75secに拡張(頑張れ)

in: 905,998,522

judge: 45,653,976,336

place: 304

13回目提出

方針: 温度関数をいじった

in: 920,053,357

judge: 45,936,069,295

place: 305(46G乗らね~~~~~)

ここらへんでジャッジのコンパイルオプションと手元実行のオプションが違うことに気付き、直す。ローカルでの点数が合う。

最終提出

(サボりまくってたら最終日!?あたしどうなっちゃうの~~~)

方針: 雑に点数が低いやつを伸ばした

in: 945くらい

judge: 46,227,785,092

place: 490(人類強すぎ)

学び

上位の人を見ると焼きなましじゃなくて山登りで貪欲にやっててビビった。

クソデカ広告をいっぱいに広げてから削る方針もあってほえ~となった。

今回の自分の立ち回りで気付くべきは四角を伸ばしたら接触"した"方の四角を削るといい感じになるということだった。

後結果だけをビジュアライズするやつしか配られないときは自分で自作するのは結構いい方針ということも学んだ(急がば回れの精神)。

完走した感想

長期間コンテストは生活習慣崩壊するので注意!(6時寝常習犯)

後めっちゃ楽しかったけどまだ下手なので手詰まり感がすごいけど頑張って成長したいね

おまけ