AGC035

開始前37.2、終了後36.3。つまらなかった。何だったんだこの3時間は。どうすれば楽しめたのか、何もわからない。なんで何も楽しいことのない人生を送ってるんだ俺がそんな悪いことしたかよイライラするなあ。

A - XOR Circle

とらえどころがないけど、実例で考えるとa, b, a^b, aと周期3で繰り返す。挟まれるのではなく、単に連続する2つのxor取ったら次のになるという状況。なので、a, b, a^bがn/3個ずつあるみたいな感じ。じゃあNは3の倍数である必要があるかというと、全部0というケースがある(制約を確認)。これで行けそう。証明すると時間がかかるしたぶん正しいので、AGCのAはこれで行かざるをえない。きれいな書き方がわからず、きれいでないけど正しいコードを書く。WA。正しくなかった。n*2/3個のこともあるじゃん。1, 1, 0, 1, 1, 0って紙に書いてあるんだが?直すが通らない。これはびっくりする。3種類の数のxorが0になることを確認するのだが、2種類しかないときn*2/3個のほうを2回xorしないといけない。

実装に時間がかかるのもWAのペナルティを食うのも力不足によるものだからいいけど、ここで時間と気力を削がれるの不毛すぎる。AGCは楽しむためにあるんだろう?

B - Even Degrees

長さ2のパスで全体を覆うのと同じこと。どうも辺数が偶数ならできそうだ。辺を頂点とし、2辺に共有される頂点を辺とするグラフを考えると(まあ辺が2乗で増えるから構築はできないんだけど)、完全マッチングを求める問題になる。完全マッチングについて何も知らないし、このグラフが持つ性質もわからない。結局ここまでだった。他には、全域木をとるとか(残りの辺どうすんだよ)、頂点の次数を上手く使って貪欲とか、長さ偶数のパスをたくさんとるとか、色々考えたけど無理そうだった。

解説を読んだが、グラフが木の場合も解けてないので全域木は惜しくない。あまりないタイプのはまり方をしていた。で、この問題が解けることが何を意味するのかわからない。やー、確かに、長さ2のパスで覆うときに木のリーフノードから適当に伸ばして、葉の親の子(または子孫のあまり)が偶数個だったらペアにして奇数個だったら上に押し付けるようにすれば。残った辺は偶数個だからできそうではある。マッチングとは何の関係もないってことでいいのかな。解説読んでも知りたいこと書いてないのつらい(普段は(読むのが大変なだけで)知りたいこと書いてあるんだけど)。

CとDは問題を把握して5分くらい考えただけ。Cは「重みが i であるとする」がわかりにくすぎた。重みがiでない場合については何も述べていないと読める。Dは3乗っぽい制約だけど端が特別なんですかね。Cが読みやすければCもやりたかったし、Dもやりたかった。Bの考察をかなり進めてしまったので、それを捨てる勇気がなかった。レーティングはどうでもいい。AGCをやる方法を考えろ。こんな時間を過ごすためにAtCoderやってるんじゃない。