AGC028

遅めに布団に入り、眠るタイミングを逃したら、体(というか頭)が思うように動かない悔しさが出てきてつらかった。起きても異様に気分が沈んでいてつらい。

A - Two Abbreviations

何を言っているのかさっぱりわからなかった。たぶん知ってれば読める。いつもの問題みたいに。なんでも知ってなきゃいけないんだなあと思った。読めたときには解けてるというか。それは言いすぎなんだけど。えっ、文字列地方へ旅行に行ったこともないんですか?みたいな人ばっか出てるのがAGC
L/Nっていうのがね。L/Nは、Mみたいな雰囲気がある。Sの長さはNなのに。なんとなくあんな感じかなーってイメージは浮かぶけど、具体的な数値がはまらない。そこで、頑張ってN=4,M=6の例を書いた。しばらくして、LによらずSとTが重なる場所は固定だと気づく。これで解けた(基本的に最小公倍数が答えで、重なる場所で不一致があったら-1)が、実装を考えるのがそこそこ難しい。しゃくとりみたいなイメージ。まあ最近はそれもわりとすらすら書けるようになってたので、大きく詰まることもなくきれいに書ききることができた。
まさかこのときは1完早解き勝負になるとは思いもしないのだった。

BとC

Aを通したあとは、BとCを交互に考えていた。「いやこれ無理でしょ」と思ったら、別の問題を考える。その流れが効率いい感じがして気に入っている。両方解く前提ならそれがいいと思っているが、実際には片方しか解けない可能性が高いと思われ、微妙ではある。だが、コンテスト中に多くの問題に触れる価値は非常に高い。とにかく時間を捌くことを優先した。寒い日だったが、コンテスト中は体があったまり、それでいて前回のARCのように頭が熱すぎるということもなく、思い描いた試合運びができていた。しかし、「解けそう」というところまで行くことなく2時間が過ぎた。この、時間があっという間に過ぎる感覚は正直嫌いじゃない。でも、結果的に1完となるのは嫌いだ。
Bは、まずNが1小さい問題に帰着させることを考えたが、要素の追加で思ったより複雑に影響が出るのと、O(N^2)の雰囲気があったのでなかなか。色々な方向から見ようともした。各A_iについて何回足されるか、K回目の操作でどれだけ足されるか、N!通りのうちの一つで平均どれくらい足されるか、N!*N回の操作で云々。PCのキーボードのキーをブロックに見立てて考えていた。
Cは、A_xとB_yの差(の絶対値)のぶんだけ節約できるので、小さいのと大きいのをつなげたい。もう少し考えると、差の2乗とかじゃないので、大小関係だけが大事で、無理して一番小さいのと一番大きいのをつなぐ意味はない。閉路検出もちょっと思ったが、当然辺が多すぎる。何か(A-Bとか)でソートするやつだろうか。サイクルだからソートといってもなあ。とりあえずAでソートすることを考えても何も起こらない。サイクルはN!通りあるが(今考えるとサイクルだから(N-1)!通りだ)、それがどんな制約なのか想像できない。大小に分けて大と小をつなぐとして、大をいくつにするか個数が重要そうだから、何個までできるか二分探索する?O(N!)なわけないんだから、大きいのが何個なら可能とかわかるのでは?わからない。