ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

AHC024 参加記録

概要

丸紅プログラミングコンテスト2023(AtCoder Heuristic Contest 024)に参加しました。4時間の短期間コンテストでした。

ほぼ何もできなかったといってもいい。

最初の方針

連結成分をノード、「隣接する」というのを辺と考えるとグラフができるので、そのグラフからグリッドを作ろうと思いましたが、実装が大変で2時間経過。スジが悪いと思い直してビジュアライザをいじっていると、与えられたグリッドを白に塗っていくのほうが実装が簡単なことに気づきました。

かなりバグ散らかしつつ終了10分前くらいにかなりナイーブな貪欲ができたのでそれを提出。終了です。

atcoder.jp

seed0のビジュアライザ

白に塗れるところは貪欲に白に塗っていく。

真ん中あたりのエリアが大きいですね。これらを隣接条件等を崩さないように圧縮していければなあと思いつつ終了しました。あと4時間ほしい。

上手い人の解法

中心に寄せる貪欲らしいです。貪欲でもここまでいけるらしい。

https://twitter.com/Jiro_tech15/status/1705889677910348053

左上に寄せていき、最後にぎゅっと圧縮する手法。おお、と思いました。AHC系は「はしっこに寄せる」という発想はよく見る気がします。

消せる行や列を消すという発想。「隣接条件を崩さずにどう圧縮するか」というのを考えたとき、たしかに「1行ごっそり消せるなら消す」というのは実装ラクそう。天才や……

反省

AHCやることメモに「まずビジュアライザをいじる」って書いてあるだろ。なぜそれをしないんだ。

短時間コンテストは実装のしやすさ・速さがかなり重要だと感じました。

あと最近、C++でクラスを書くときはメンバ変数にm_プレフィックスをつけているのだがいい感じ。メンバにアクセスするときは通常this->を使うと思うのだが、長いのがやだ。