こちらがkaggleさんの,AHC風 Santa 2023 コンペティション ARCトッピングです

 

うひょ~~~~~~!!!!(49位/1055,ソロ,銀メダル)

 

yu_w | Contributor | Kaggle

やったね

参加記代わりに何かを書く!(1か月遅刻)ということで,

銀メダル解法は最後に軽く紹介しつつ,

kaggleコンペそのものの紹介!!(特にAHC参加者向け

 

機械学習の話はありません!

kaggle santaコンペは年末に開催される数理最適化コンテストです

 

 

コンペ概要

「3種のルービックキューブ風パズルの特盛にワイルドカード付き」です.

3種のパズル

 

まず配列でパズルの状態が貰えます.

操作の一覧も,配列がどう変化するかという形で貰えます.

完成形までもっていく操作列を出力せよ.

という感じです.

一応,雑魚の初期解は貰えます.

たまに,数マス間違っててもOKなテストケースがあります(ワイルドカード

 

cube

ルービックキューブです.

でかいのもあります(最大で33*33*33).

しましま模様やチェック柄,絵柄付きのサンプルもあります

 

 

こちらで遊べます(自分は2*2*2も解けませんでした)

www.grubiks.com

 

wreath

右と左のリングがあって,どちらも時計・反時計回りに回転ができます.

最大でピース100個程度のリングが2つ繋がっています.

 

 

こちらで遊べます(リングの交わり方と色の配置は違うので注意)

ruwix.com

 

 

globe

地球儀の形をしています.以下の二つの操作ができます.

  • 同じ緯度の行を東西に1マス回転
  • 経線に沿って真っ二つに切断,片方を180度回転

 

 

こちらで遊べます(4eta(しーた)@dna4_さんのコンテスト後tweetより発見)

www.jaapsch.net

 

 

 

 

ルールの違い

1か月焼いたって,いい

 

皆さんは「焼くのは2秒まで」と言われ続けて育ってきたので,リミッターを解除されたパワータイプのモンスターの気持ちになりますよね

 

 

そもそも,入出力が

csvファイルなんです.(※コンペによります)

 

スパコンで殴って最強の答えを手元で作り,それを提出したっていい.

kaggleとは暴力の世界なのです(?)

 

 

じゃあ

「太古から最強のPCで焼いてる人が勝ちそう」

とかなりそうですが,そんなことはありませんでした

詳しくは解法で紹介

 

 

順位表を,破壊

kaggleの一番イカれたシステムはやはりこれ

公開されたコードの数々.ご丁寧にもスコア順にソート出来る

 

そもそもの話ですが,コンテストで優秀な成績を取ると,これが貰えます.

これはコンテスト以外でも貰えます

 

 

kaggleサイト内には,解法やコードを公開できるページがあり,

いいね(upvote)を集めることで,メダルや称号を得られます

コンペで勝てなくたって,「記事のグランドマスター」になれるんです

 

 

結果として,強い解法を公開する人は一定数存在し,

公開されるや否や,参加者も次々にそのコピペを提出をするため,

いつ自分の解法が焼き払われるのか怯えながら過ごす

というのも,kaggleの特徴です

 

???「弱ェ奴は死に方も選べねエ」(ドン)

実際に焼き払われた話は解法パートで紹介

 

 

 

 

 

 

 

 

解法

 

解法解説の前に,まずは前提知識を軽く説明.

参考として,コンテスト中に非常にお世話になったフューチャー社の記事も貼っておきます.

qiita.com

HACK TO THE FUTURE ~!

 

前提知識

通常の3*3*3ルービックでさえ,状態量は10^19乗あるらしく,

適当な探索では時間内に終わりません.

そもそも計算時間以前に,メモリがボトルネックになります.

 

限られたメモリで答えを見つけるor逐次改善しないといけません.

ここで,以下の工夫が可能です.

 

双方向化とtwo-phase
双方向化

スタートとゴールから探索するだけで,あら不思議.

探索空間が大体平方根ぐらいになります.

競プロでいう,「半分全列挙」です.

 

two-phase法

中間ポイントを設けるテクニックです.

ルービックキューブにおける「まず1面揃える」などがこれです.

 

ゴールまでの手数が長いと,指数的に探索空間が増えるため,

これをするだけでも探索空間が減ります.

さらに,探索する空間に制限を加えやすいのも大きなメリットです.

例えば「まず1面揃える」をする際,揃えたい色以外は考える必要がありません.

無関係な面を一次的に黒で塗りつぶすなどすることで,探索空間を減らすことができます.

 

3*3*3のルービックキューブアルゴリズムにおいて有名なものに,「Kociemba's algorithm」があります.

これは上手に中間ポイントを設けることで,かなり最善に近い解を得られます.

 

以降,中間ポイントを置きまくることをmulti-phaseと呼ぶことにします.

 

 

自分の解法

太字が自分で実装したもので,それ以外は拾い物です.

解法

 

銀メダルの決め手になったのは,大きいglobeのソルバーを作れたことです.

実際それ以外はかなり適当です.

wreathは比較的簡単+テストケースが少ないため,適当.

cubeはコピペコードが強すぎて,ほとんどコピペそのままになっています.

 

 

globeの解法

結論から言うと,3か所のピースをそれぞれ入れ替える操作列(wataさんに倣って3-rotと呼びます)を見つけると,解けます.

 

まず見つけ方です.

まず,1色ずつ揃えるmulti-phase+双方向全探索を実装する際,気付くべきことが2点あります.

  • 今揃える色に関係ない緯度の操作はどうでもいい
  • 180度回転の操作は1種でも解ける

1つ目はすぐわかります.

2つ目は,「全ピース東+180度回転+全ピース西」によって,あらゆる180度回転が一種類の180度回転で再現できることから証明できます.

 

これにより,必要な操作が5種類にまで絞れる(南北それぞれの行を東西で2*2通り,回転で1通り)ため,かなり深く探索できます(20手程度).

これによって,はじめて実験が可能となります.

 

 

うきうきで2点swapの操作を求めると,操作が長いだけでなくglobeのサイズに依存する,非実用的な答えが返ってきます.(絶望)

 

ここで挫けず,3-rotを試すことさえ出来れば,

  • サイズに依存しない
  • 操作の先頭と末尾が互いに打ち消し合う
  • 操作場所の自由度が高い

という,最強の操作を発見できます

3-rotの例

この操作を駆使し,次のステップで解くことが出来ます.

  • 北出身と南出身の数を,どの緯度でも半々にする操作を探索
  • 3-rotで北出身と南出身で固める,回転して南北について解ける
  • 3-rotで経度を調整して完成(柄付きの場合,転倒数に注意)

 

また,最終日に初期擾乱を山登りで加えるコードを追記し,悪あがきしています.

 

 

その他の解法

 

wreathについては,解と異なるピースの数をなるべく減らす最良優先探索の類をするだけで,そこそこのスコアが出ます.

 

序盤に

N*N*Nのルービックキューブを解くソルバー(3*3*3に帰着→Kociemba's algorithm)

github.com

 

を使用したnotebook公開攻撃がなされ,通常のルービックはほぼ解かれた状態でスタート(ご丁寧にもwreathとglobeの簡単なケースを解いたデータもセットでついてくる)

 

チェック柄のルービックキューブは,予め色の塗り替えを行うとこのソルバーで解けるのですが,これもnotebook公開攻撃がなされ,ついに発狂.(中盤ではwreathと塗り替えだけで銀メダル圏内だったのに,一気にメダル圏外へ追い出される)

 

これを上回るソルバーを作る自信もなく,戦意喪失・・・

結局,ルービックにも3-rotが存在し,それが上位解法ということだそうです.

 

面内の3-rot操作の存在自体は,フューチャー社のこの記事のおかげでコンテスト中に知りました.

qiita.com

\HACK TO THE FUTURE ~!/

 

ただ,面内の3-rotだけでは転倒数的に柄付きキューブは解けず・・・(偶置換)

面の外との3-rotも見つけると,自前のソルバーが作れるようです・・・(惜しい?)

ただ,高wildcardの柄付きサンプルは,ソルバー+面内のスワップだけで許されるため,スコアにかなり貢献してくれました.\HACK TO THE FUTURE ~!/

 

これらに加え,解の最適化や逐次改善を行うコードが公開されており,コピペにコピペを重ねて最終提出です.

 

 

 

感想・まとめ

AHCからのARCからのAHCやないか!!!

強い性質を見つけるためにAHCをして,

強い性質を使ってARCをして,

それをAHCをして改善.

総合格闘技者の気分でした.

 

最上位のAHCerは世界レベル

wataさんをはじめ,最上位のAHCerが活躍していたのが印象的です.

AHCの競技人口的に,最上位のAHCerが世界で戦えるのか正直疑問があったのですが,バチボコに強くて笑っていました.

 

メンタル終了

1か月ソロでやるのは流石に辛い.

しかも順位表破壊攻撃で1か月の努力が水の泡になるので,本当に病みます.

最終日は10位ぐらい順位が落ちたので泣きかけました.(潜伏などの順位表の攻防がAHCより激しい)

これを克服するには最強になって破壊する側に回るしかありません.

皆さんも最強になって破壊を行いましょう! おわり

 

 

 

最後まで読んでいただき,ありがとうございました

 

 

 

 

中国旅行,時々競技プログラミング

 

これは合間に競プロが挟まるだけの中国旅行日記である.

随時更新

 

登場人物

○Z君(中国人留学生)

最重要人物,旅行の立案者

中英日のトリリンガル天才留学生だが,日本語の多くを5ch,ワカッテTV,年収チャンネルで学んでいるため発言が終わっている.

 

○その他旅行メンバー3人

A君,B君,yu_w(筆者)

 

行先

青島(チンタオ)

 

世界史で習うやつ

第一次世界大戦でドイツ領だった所を、日本が占領した、そう、そこである

ビールがうまいらしい

Z君の帰省に合わせてお邪魔させていただきます

 

一日目

空港まで

 

Z君は今日も遅刻である.時間通りに来たことはない.

大陸で生きてきた彼にとって,時間とは砂粒のように些細なものなのである.

 

Z君はよく連絡が途絶えたり(電話切られる)

連絡が来たと思えば

 

Z君「メガネかけたらスッキリした」

 

といった感じで

飛行機に乗るまでの時点で既にヒヤヒヤである.

 

重要なのは,

他メンバー3人は中国語が一つもわからないということである.

ここから12泊13日,我々の命は彼が握ることになる.

 

精進(機内)

合間に挟まる競プロの時間です.

atcoderに時々参加してくれてるA君(もうすぐ茶色!)と一緒に,蟻本p.25の「ハードルが上がったくじびき」をやりました.

【ほとんど同じ問題】

https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0529

 

数列(長さ1~1000)が与えられるので,そこから4つ重複ありで選び和がMになるものがあるかYesNoで答える問題です.

 

愚直にforループでO(N^4)

最後のforループを二分探索やsetの類に置きかえればO(N^3logN)

ところが!

あらかじめ二回分のくじ引き結果を作っておけばO(N^2logN)になると!

解法のあまりの賢さに涙が止まりません.

 

機内食

 

〜メニュー〜

鴨肉炒めたやつ+ご飯

パン

飲むヨーグルトカップにストロー刺す)

ザーサイ(赤い袋)

 

Z君いわく、鴨は養殖が簡単で中国では一般的らしい

 

味のレビューはめちゃ難しい

一口目は慣れない味付けに違和感を感じるも、慣れてくるとハマってガツガツ食べれる

見慣れぬ容器の飲むヨーグルトとザーサイも、味は日本と同じでうまかった

 
家到着

到着してすぐにZ君の父が車で迎えに来た

ラクションが飛び交う車道の中、寝て起きるとZ君の豪邸があった

室内の写真はダメらしいので屋上からの景色

3階建て屋上ありの豪華な家でした

これが別荘だというのだから、Z君、実はとんでもない金持ちなのだろう

もう観光やめて一生ここに住みたい

 

夜ご飯@Z君の家

〜メニュー〜

白身魚カニ、アサリ(青島名物)、牛タン、筍

 

最高、カニはミソまみれ

 

中国語でおいしいは

好吃(ハオチー)

というらしい

これは紛れもなくハオチー

甘くて美味しいワイン飲んでから記憶がない

 

インターネット事情

中国ではインターネットが規制されていて、Xやlineはできない

VPNを使えば規制を抜けられるが、フリーのVPNアプリは対策されていた

今回はB君がVPN(タイ経由)付きポケットWi-Fiをレンタルしたため、Xやlineができた。

ウマ娘(日本版)含む国内のゲームのほとんどは国外のアクセスを切っており、今回のタイ鯖のVPNだとプレイ出来ないのだが、更にフリーのVPNアプリを挟んでIPを日本にすることでプレイできた

 

中国でウマ娘新シナリオを初見プレイ

メイちゃん結婚してくれ

 

二日目

 

Z君は自身がロングスリーパーであると主張していて、その上がっつり夜更かししていてまるで起きる気配がない

 

精進

青島では1時間の時差があるため、CurrentStreakが切れて表示されて鬱

最近は典型90を埋めているので☆4問題を一つ

https://atcoder.jp/contests/typical90/tasks/typical90_bf

 

クソデカ回数操作しろと言われたら、俺の乏しい引き出しでは周期性かダブリングしかないのである。

無事エラーを吐き散らしながら自力AC

自力ACした時に出る脳汁は長寿の秘訣である。

 

観光

朝(昼)ご飯として激辛麺を食べ出発

クソ安タクシー(日本の4,5倍安い)で地下鉄に向かう

 

 

駅の改札に入る時にはイスラム系のテロ対策の保安検査があった

カバンをx線検査に入れてゲートを通ると、

 

職員のお姉さん「ちんちん!ちんちん!」

 

Z君によるとこれは、

请进(Qǐng jìn.)

「入ってください」

の意味らしい

 

 

今回は栈桥(ヂァンチィアォ)というところに行った

 

 

海の見える綺麗な場所で、ドイツに占領されていたので街並みがヨーロッパ的である

 

 

本当にここ中国か?

 

教会を見てきた

 

油(肉汁ではなく油である)のすごい肉まんを食べた、ハオチー

外はカリカリだが小籠包のスープ並に入っている油は中々慣れない

Z君いわく、日本の肉まんも中に油を入れるべきだそうです

 

名物ロウ山コーラ

コーラガム的な味がしてハオチー

 

夜飯はここで

なんか鴨と春雨が入っているやつ(500円ぐらい)

鴨(もも、ハツ、砂肝?、肝、胃腸の類?、血を固めたやつ)が入っていて、スープがハオチー

 

皆さん気になるのが血だと思うんですが、無味無臭のやわめナタデココ?こんにゃく?って感じでした。

頑張って味を探そうと口の中でモチョモチョしたんですが無味無臭でした。(もっと口内炎みたいな味がするものと思っていた)

 

マキバオーみたいなテイストの牛

 

突如路上が煙に包まれる

Z君いわく、故人の命日に黄色い紙(天国で使うお札、100億円とかの大金らしい)を燃やす文化があるそう

場所は自由で、駅前でやってる人もいた

 

帰りに派手なイオンで食材を調達

 

内装が同じすぎて脳がバグる

あの悪名高きT◯P VALUEもあった

 

三日目

 

Z君は起きない

 

精進

起きないとわかっていれば、長考できるので、難易度を上げて⭐︎5に挑戦

 

https://atcoder.jp/contests/typical90/tasks/typical90_bh

 

最長増加部分例(LIS)を知っているのでそれを使うことはわかるのだが、使い方がちょっと頭悪くてバグりまくった

何とか自力ACするが、解説の賢さに敗北

LISの計算に使うリストとは別に「i番目まで使用した時点でのLISの長さ」を持つのは汎用テクだと思った

 

観光(小魚山)

 

二日目の観光地から少し東に行った

小魚山というところに観光

山というか丘?を登り、塔を登ると…

 

青島は湿度がそこまで高くなく、風が涼しくて気持ちがいい

 

鶏肉の辛い麺

牛肉の刀削麺(味は肉うどん)

魚煮たやつ(高菜みたいな味)

モツの入った麺

 

特に鶏肉の辛い麺がめっちゃハオチー、こんな冷食あったら買いだめしたい

 

ワイン博物館

 

これが本場の怪レい曰本语!!!

 

 

ずっとこれを待っていた

試飲もあってgood

 

ビール博物館

 

 

 

ん?日本と何も変わらなくないか(謎擬人化かわいい)

 

まあいいか!!!!!!

乾杯!!!!!!!!!!

 

 

帰り、アメリカ(美国)の核の脅威を告げるニュース

 

買い出しはいつものピンクマークで

 

超 市 入 口

 

4日目

 

今日はZ君の両親が夜来ることもあって疲れを取るために休み

ここまでのブログもほとんどここで書いてる

 

精進

Current Streak に脳を焼かれている

https://atcoder.jp/contests/typical90/tasks/typical90_ci

 

「Pスヌーク以下の組がちょうどK個」の判定とかワーシャルフロイドしか思いつかない

後はにぶたんするだけ

 

Python民としてグラフ探索はTLEの宝庫であり、float("Inf")の使用は避けがちだったが、この問題では実装がシンプルになるのでInfのありがたさを知った

 

でもx>=P+1ではPスヌーク以下の組の数の変化しない事に気付いてしまったので、結局infを使わず、高速化もできた。

 

昼飯

うさぎを食べた

 

特に加熱は要らないとZ君は主張するので冷蔵庫で冷えたまま食べた

これがうまい!

冷やしタンドリーチキンって感じ

骨も取りやすくて食べやすい、うさぎ最高

 

夜飯

 

本読んだりしてゴロゴロ

Z君は料理が好きらしく、洋食を振る舞ってくれた

 

 

 

ビーフシチュー

Z君料理がうますぎる、ワインがいい味を出していた

中国では牛肉は500g単位で売っているらしく、700〜800円らしい

 

食後はトランプ大会をした

優雅な中国旅行である

 

〜随時更新〜

AHC018へっぽこ参加記録

黄パフォ!!!!うおおお!!!!!!

解説書くぞ~

・・・と思ったんですが,みんな同じことしてたので後半にちょっとだけ書きます

 

前半で主に頑張ったところを紹介します!

 

頑張ったところ

環境構築

 

実はyu_w,3連敗中だったんです

  • HTTF本選(大敗)
  • AHC017(歴代最低記録)
  • 皆解会004(役に立てず)(皆も参加しよう!)

 

 

そして連敗に連敗を重ね,悩み悩み抜いた結果

yu_wがたどりついたさきは

 

                                       

 

自分自身を育ててくれたビジュアライザーへの限りなく大きな恩

自分なりに少しでも返そうと思い立ったのが↓

 

 

一日目から環境構築!!!

コードを動かすとビジュアライザも動く

 

今までは一日一万回web版ビジュアライザにコピペしてたんですが,ちょっとしたバッチファイルも書くことで音を置き去りにしました.

 

インタラクティブにもばっちり対応済み!(コードを内包)

これはインタラクティブに対応できずに

8時間虚無をしていたHTTF本選

と比べて大きな成長と言えます.

 

完璧すぎるスケジュール管理

やはり強い人が指摘するように,我々こそ焼きなまされないといけないんですよね(?)

なるべくアイデア出しと実験を繰り返そうと思って取り組みました↓

 

  • 初日:実験高速化のための環境構築
  • 中盤:アイデア出し,実験,考察
  • 最終日:パラメーター調整

 

パラメーター調整は最終日まで封印しました!(逆に敗因かもしれないけど)

そのパラメーター調整でもしっかりバッチファイル作って半自動化!!

エクセルに手で打ち込むおじさんスタイルからは卒業しました!!!!!

 

 

以上,今回成長した点でした!!

以下,やったこと書きます.

 

やったこと解説

ヒープでクラスカル

まずはクラスカル法の要領でどこを繋ぐか決めます(水と水以外)

ただし繋ぐ前に,硬さをチェックして,ダメなら後回しにします

   

具体的には辺の重み,上限値に適当な倍率をかけてヒープに戻しています.←(適当すぎるのが敗因?)

グリッドで管理

家と水源を含むグリッドを作って,隙間を11マス~で補完しています.(斜め無し)

seed=0のマップはグリッド幅9ぐらいがスコア高いのですが,seed=0~99の相対評価をローカルで模倣すると11に落ち着きました(上位陣は12っぽい)

         

固さチェックはこのグリッド点上で行います.

 

迂回について

これは反省点でもあるんですが,安く迂回するコードを実装できず,最短ルートをDFSで探索してます

 

その代わりに既に繋がったグリッド点に

新しく家が建つという,きしょい方法

で代用しています.

 

         

これを・・・

        

こう!!!
 
殴り方

初回は見積もり分の90%で一発殴って,その後細かい調整をします.

細かい調整パワーは√(2*C*残り固さ予想)

 

この見積もりを「多分隣と同じぐらいだろう法」でやると効率はもちろん,初回のパワーも80%ぐらいまで下げないと,「もう柔らかいのにフルパワーで殴り続ける現象」が発生したりするのですが

でも最小二乗法による平面近似で傾きを使えばかなり正確に見積もれますの図↓

 

見積もりに使用したデータの範囲は,殴る場所からx,y共に±2までです.

 

Q.逆行列なんか計算したら値が発散したりしませんか?

A,p=min(5000,p)

ヨシ!!!!!!!

 

おわり

こうやって書くと無駄を多く感じるので

次は本番中に軌道修正したいですね・・・

 

ということで次はトヨタ業務コンで会いましょう!BYE

 



HTTF本選へっぽこ参加記録

本選参加してきました!!!

 

予選↓

yu-wtle.hatenablog.com

 

ということでいろいろ

書きます

 

 

 

 

 

参加にあたっての注意(へっぽこ向け)

この項目はへっぽこ,つまり,

一般常識,社会通念レートが灰色の人を対象にしています.

 

 Q.灰色の実力とは?

 A.このあたりから化け物しかいないので説明をサボります.僕もここです.

 

会場を調べておく

僕は会場を間違えてTLE(遅刻)してしまいました.

実は,事前に経路を調べておくことでO(1)で会場入りすることができます

 

 

早めにホテルを取っておく

出発の前日に予約すると高い&空いてません

しかも予約ミスるとキャンセルできません.(キャンセル料100%)

僕はこれら全てを実行し片道1時間のホテルから向かうことになりました.

 

事前に出来ることはやっておく

僕はSPI受験とノーパソ環境構築で観光時間減りました・・・

自分Atomの民なんですが,パッケージのサイトが死んでたのでやばかったです

 

本戦での解答(おまけ)

~1:30

自分が最初にやったことは,くまなく探索するための座標?作りです.

 

新しい座標で管理

今になって考えるとあんまりやる意味ないなと思いますが,すでに踏んだ箇所を持つことができるのは多少利点があると思います.

これを使って矢印が向いた方へ進んで行って6万点です.

 

昼ごはん

僕もサンドイッチです.おいしかったです.

サンドイッチ

一番売れてた気がします.

~8:00

このまま棒の向く方法に進むと効率が良くないので,三角測量的なことをしようとしました.

  • STEP1 何回か踏んで,大まかな方向を知る.
  • STEP2 斜め45度にワープして同じことをする.
  • STEP3 交点にワープしてひたすら探索する.見つけたら適当ワープをして振り出しに戻る

三角測量の導入・・・?

実装が上手くいかず52位でした(下から2番目)・・・・・・・・・・

 

遅刻とかが原因というわけではなくて(図々しいので集中できた),

インタラクティブ苦手×web版ビジュアライザ使用

で挙動の確認が難しかったって感じです.

ここで反省文をつらつらと書いてもいいんですが,ここでは消費せず,

つよつよコーダーになった時の酒の席でのネタとして取っておくことにします!!

 

 

オンサイトの雰囲気(最重要)

うっうっ・・・(泣)

遅刻するわクソコード書くわ

おまけに誰とも話せず終了だなんて・・・

 

?????「「「ちょっと待ったー----!!!!!!!!」」」

 

この声は!?!?

 

ふくぶちょ~さん!!

4eta(しーた)さん!!

ツカモさん!!

 

3人「なに一人で飯食ってんだよ,俺たちが相手してやるよ」[要出典]

 

みんな!!!!!!!

 

話しかけてくださった方々,本当に貴重なお話ありがとうございました!!!!

 

つよつよ有名人だらけですごい空間でした.

ほんもの〇リーさんはアイコンでみるよりかわいかったです.

つよつよ空間に気を取られて忘れがちですが,ごはんがおいしいのも魅力です(カレーは下に溜まっている肉を根こそぎ回収するのがコツ)

FUTUREさんありがとうございました!

 

さいごに

ここまで読んでいただきありがとうございました.

例の掛け声で締めくくりたいと思います.

 

HACK TO THE~~~~?

自分「FUTURE~////」

 

AHC016へっぽこ参加記録



111位でした!やったー!

順位表

せっかくなので

なんともいえない順位の

なんともいえない解法を

 

書きます

 

~2日目(1億点)

サンプルコードを改造!

 

これを

10000000000000

11000000000000

11100000000000

 

こう

0000000000000

1111110000000

1111111111111

 

ノイズに強そうだなとおもったからです(小並感)

 

~7日目(4億点)

ノイズについて思いを馳せることふつかみっか・・・

 

「ノイズ2:点をシャッフル」←これ

 

これはなんなのか・・・と.

 

そして理解(わか)りました

 

ノイズ2で保存される情報,それは・・・

  • STEP1 全体の線の本数(サンプルコード)
  • STEP2 各点それぞれから生える線の本数
  • STEP3 グラフの形(化学でいう異性体みたいなものも見分ける)

 

きっと最上位の猛者達はSTEP3まで進んで,多様なグラフを生成,デコードしているのであろう...(違いました)

 

せめて自分はSTEP2まで行こう・・・

そう思ったのでした・・・

~完~

 

というわけにもいかないので

STEP1の調整しました(4億点)

  1. eps=0の満点解答の作成
  2. STEP1でのNの最適化

 

2に関しては

エクセル(手作業)で.

STEP1のやりかたでエラーがなくなるN

う~ん頭悪そう

 

 

~最終日(10億点)

 

自分の脳内ではSTEP2は

gの取りうる空間みたいな(横:線の本数,縦:グラフの種類)

いろんな種類のgを作れる,まさに金脈のようなイメージ

 

ここに如何にgを配置するか・・・

 

・・・乱数で生成!(この手に限る)

 

→5億点

 

あれ????しょぼくね????

多少高速にしたり,パラメーターいじっても6億どまり,とにかく

何かがおかしい・・・(今更)

 

おかしいおかしいとうなされ続け,

最終日の朝4時,お布団の中で天啓が・・・!

 

点から生えてる線の数をソートしたもの
①乱数生成②うに型③団子型(クリーク)

これは,「点から生えてる線の数をソートしたもの」です

 

わかったことその1

乱数でつくったものは,大体①みたいな形になってしまう

そんなにノイズ1につよくない・・・

 

わかったことその2

サンプルコードをベースに作ってたのですが,

これは上の図でいう②,

これをうに量産型と呼びます

これ実は万能ではなくて,

線の本数が少ない:③より②の方がノイズ1に強い

線の本数が多い:②より③の方がノイズ1に強い

 

うに量産型・・・お前線増えると弱かったんか・・・

てっきり線の本数にたいして線対称かと・・・

 

 

結局,

  • 線の本数が少ない:うに量産型
  • 線の本数が普通:うに量産型とクリークを交互に
  • 線の本数が多い:クリーク
  • 広めの間隔で乱数生成型も設置しておく
  • 余った時間で乱数生成もする(この手に限る)
  • エクセルでN調整もする

Nの最適化

結果,最終スコア10億点でした.

ひらめきも大切ですが,ダサいやり方でもスコアが上がるのはAHCの魅力ですよね

Atcoder replay

LeiteさんのStatistics


ここまで読んでいただきありがとうございました.