Matchに出てみた話。0:00EDT)最後に出たMMは4年前のTCO13らしい。(問題文だけはとりあえず読んだもののあまり気乗りがしなくて参加に至らず、というのは何度かあった気がする。coderに上がること。今回の問題は、与えられた多色(2〜20色)のパターンを、クロスステッチでできるだけ少ない糸で刺繍するという(いかにもTSPな)問題。Problem)を解くコードを自分で書いたことはなかったので良い機会になりそう。初日とりあえず公式ビジュアライザをDLして、(任意のseedの問題パターンをファイルに書き出すためのダミークラスを作って)問題パターンを手に入れる。サンプルコードを動かして、少し自分でもいじってみる。・上から単純に走査(左→右→左→右→...)・\/\/|と進んで/\/\で戻れば節約できるのでは?いや、裏面に抜けたのと同じ位置で表に戻ってこないといけない。刺繍的にはあり得るかもしれないが、今回のルールでは無しなのでは。(初期に異常な高スコアが出てた人たちはそうしていたらしい)・盤面をNxNマスのブロック(というかウィンドウ?島?)というかで分割して、その中の接続と、他のブロックとの接続をTSPで。(N=Sでセル単位のTSP)・(union-findで)接触するセル同士を島として、(あるいは1つ空けたぐらいなら同じ島に含めたりして)、(以下同じ)自分用ビジュアライザを(Python+PILで)さくっと書いた。・とりあえず島の中心座標をもとにTSP。その後、島の上端・下端を用いたTSPを併用。・TSPは辺と辺を交換するやつと、あるセル(1つ〜連続した沢山)を別の辺に移動するやつと。→どのセルからもコスト0で行ける点を用意して始点&終点にすれば良いからそうしたこの時点でスコアは43万前後。・水平方向に連続したセルのみのグループ化を試したり・島が大きくなると島から島への接続が非効率になってくるし、計算量多くてもセル単位TSPでいいんじゃないか、と思ってセル単位のTSPに絞ってコード書き直し・セル間の接続は、セルの原点座標どうしの距離を基にTSP・接続していく際にいちばんましなin/out位置を取っていく・経過時間を取得してTSPを途中終了する(つもりでclock()をざくざく読んだら軒並みTLE;TopCoderサーバではclock()呼び出しは結構コスト高いのね)ローカルでのテストに、seed1〜100の入力のほか、最悪ケースを自作して追加。ローカルのseed100までの平均で50万ちょい。submitすると49万台。・精度上げるには、セルのどの角から入ってどの角から出るかも含めてTSPしたほうがいいか?(セル数x4)の2乗分の距離を計算する必要があるけどやってみた。セル内でのステッチは入った角の両隣りのどちらかの角(±1)から出る。...)・2-optで入れ替えする際には、もっと良い角があればそっちに回したとりあえず、サーバ上で50万は出るようになった。これ、焼きなましとかしていかないとトップ集団に追いつけないんだろうなと思ってたんだけど、どこをどう焼きなましたらスコアが上がるのか掴めなかった。距離にノイズを入れたり初期配置をランダムにしたりとか色々してみたけどスコアを上げられず。終了時間ぎりぎりまでねばる、みたいな事はしてなくて(出来なくて)、いちばんましだったやつをsubmitして終了。最終投稿コードhttps://gist.github.com/naoyat/e6336534425bf787731722a66af2d8b8終了時点で19位。2017年3月16日kuuso氏の解説。初期に\/\/みたいなの無しだよね、ってなってから、セルの分解そのものを思考から外してしまっていた。leaderboard"のキャプチャに登場してた最終結果(システムテストを2回回していたり、その他かなり時間がかかってたみたいだけど)19位。»@naoya_t自然言語処理とか機械学習とか競技プログラミングとか。競プロ精進記録は別ブログ🔒に移しました。yukicoder遅延伝搬セグメント木の復習をしたので、beetさん作問のセグ木コンテスト(2019/9/6開催)の問題を解いてみた。サウスタワー23Fなんで自分に参加権が来たのかよく分からないオンサイトイベントに参加してきた話。146のQ4でN個の点の3次元マンハッタン距離の最大値を求める問題が出たのでメモ。"なお、接尾辞配列を構成するアルゴリズムは他にも多数存在しています。14:00-FORCIAさんで開催されたオンサイトのゆるふわコンテストに参加。過去問コンテスト後に読んだ問題たち。ここで出てくるテクニックもこの機会にぜひ身につけておきたい。