ABC126

Fのジャッジを待っているときに測ったら36.8だった。Fのジャッジは20分近くかかったと思う。順位表を見ていると僕より後に提出した人の結果が先に出ていた。これでもしACじゃなかったらかなりの不利を被ったことになる。つまり、かなりの不利を被った人が一定数いると思われる。

今回のBみたいのはさすがにやりたくないけど、300から600までのやりたかった難易度。ABが面倒でCDEが簡単だったので、楽しむというよりは早解きのプレッシャーが大きかった。でもたくさんの問題を解くのはやはり楽しい。今回実装がかなり軽かったね。軽いとはいえグラフ、みたいなコーディングをなかなか瞬殺できなかった。

A - Changing a Character

珍しく問題文が数秒で表示された(URLを開いておいて開始と同時にF5)。Nが50。ABCのAでループだと!?まあ普通に書く。小文字への変換は'a'-'A'を足す('A'がこれで小文字になるので他でも行ける)。あ、結果的にはループ必要なかったね。

B - YYMM or MMYY

Aを提出してBを開くも、表示されるまでに30秒以上かかった。自分にとってunratedの旧ABCと違い、Aの早解きよりBの問題文を確実に得ることが重要かもしれない。さて、これはかなり苦手。答えが4通りもある。0012みたいなサンプルがないのB問題にしては不親切だなと思った。判定を関数にするかで悩むが、スマートな実装が思い浮かばないのでベタ書き。入力を整数にすることも考えたが、0で始まる入力でどうなるかわからなかったのでやめた。サンプル2の0112が僕の誕生日に見えてしまうことで、年月ではなく月日という認識も生まれてそこそこ混乱した。かなり時間は食ったが、きれいに書けたのでよかった(改めて見るとループ使えたなー)。俺の早解きはここからだ。

C - Dice and Coin

けっこう怖い見た目。問題文も全然頭に入ってこない。まあサンプルもあわせてゆっくり読めばわかる。というかサンプルの説明がかなり親切で、書ききったあとも「やるだけで説明の通りだけどいいんすか」という感じだった。whileで2倍していくとこだけだね。O(N)も考えかけたけど何の工夫も要らない。

D - Even Relation

ただの二部グラフじゃん(そして木は自明に二部グラフ)と思ったけど、「wって何?」と問題文を読んでやっと趣旨がわかった。根付き木。いや、次数が1の頂点を根にすべきかな。いやどうせ分岐するから。などと考えるうち、頂点をめちゃくちゃ増やせば辺の長さが全部1のケースに帰着できることに気づいた(解けた)。つまり、適当に決めた根からdfsして距離の和、うーん10^9だから和はintじゃ収まらないないや偶奇だけでいいじゃん。ちょっとドキドキしながら全部偶奇だけの情報にして書いていく。サンプル2がお茶目だった。

E - 1 or 2

まあA[X[i]]+A[Y[i]]+A[Z[i]]って誤読するよね。それはすぐ気づいて、Z[i]は偶奇を表すだけなのに100までって何よと思ったが、のちにZの情報は不要と気づいて納得する。情報は2数の偶奇が一致するか。じゃあ情報の数だけコストが減る?いや、矛盾がないと書かれている通り、冗長なものもありえる(紙の上で多重辺がないようにループを作ってみた)。矛盾がないのだから、ここは一つの塊として、んー連結成分を数えればよさそう。UnionFindでいける。あー、単にroot(i)==iかで確認できたか。そして、答えは単に連結成分の数(!)。コスト0がありえないとなかなか気づかなかったの弱い。

F - XOR Matching

全然わからんのでM=2のケースを手で試す。全探索プログラム書いて実験することも考えたがさすがに今回の場合は不毛そう(計算量でかいしそれで自明解以外ないとか普通にありえる)。少し考えると2^M以上の数は作れない。また、a[i]^a[j]=0なので両端はないとしていい。たとえばM=2,K=3として、3で何かをはさむのだが、3123のようにしたら131232のように他も3にできる。0は簡単に足せる。13120302とか。構成できてしまった。そもそもサンプル3つのうち2つが-1なのがあからさまで、自明解しかないか見た目で簡単にバレてしまう答えかどちらかだ。

Kが0以上2^M未満ならKを他の数で(M=3,K=3)765421030124567のようにはさんでやれば、K以外の数についてはOK。0以上2^M未満の整数たちのxorは0なので、Kについても7654210301245673こう置けばOK!と思ったらサンプルが通らない。なんかこんなこと前もあった気がする。終了後落ち着いて考えると、2^M個中各bitの立っている個数は全体の半分で2^(M-1)個、基本は偶数になる。ただしM=0のときは0が1個で1が0個(0は奇数個だが0なので)、M=1のときは0が1個で1が1個(両方とも奇数個!)。これ、なかなか慣れないなあ。

全完できてよかった。Cまでだと苦手セットでDEも差がつかないので、Fがxorでラッキーというか。思ったより難易度が低かった。rated対象の人はそう簡単に全完できないかと思ってた。5/13に高い熱が出て「新生ABCの初回に参加……!」とまあなんかあったけど結果として普通に参加できて本当によかった。ただ、ジャッジが遅いだけでなくけっこう不公平な状況だったのでratedにはならなさそう。なんというか、そういう状況になったこと自体は非常に残念だけど、そのコンテストにやはり参加して体験したいのよね。