ARC095

レーティング上がったのに気持ちが沈んでるのおかしくない?自分の限界というものを見せつけられるからね。まあ競プロは明らかに健康にいいので。

C - Many Medians

ソートしたときの真ん中の2つしか出力に現れなさそう。左を削除すれば右が中央値になるし、右を削除すれば左が中央値になる。問題は、順番通りに出力しないといけないこと。ただまあ閾値はソートすればわかるので、その値を持っておいてあとvectorはコピーしておけばできそう(チキンなのでコピーコンストラクタではなく代入演算子を使った)。
どうせコピーするならコピーしたほうをソートすればいいのにオリジナルをソートするから少しだけややこしくなる。同じ値があるときが大丈夫か少し考えた。どうせ大丈夫だろうとは思っていた。必要なところを詰めていく感覚、競プロっぽくていいよね。どのXが中央値に選ばれたかは関係ない、値だけが重要なんだってね。

D - Binomial Coefficients

まず、パスカルの三角形でググって表示された画像をながめた。降順に出力するという意味が瞬時にはわからなかったが、サンプルを見ればまあそういうこと。さて、大きいほうの数は、パスカルの三角形の作り方を考えれば、大きくするデメリットがない。最大の値を選んでいいか?最大でない値を選んだとして、相手が何であろうと最大値と入れ替えれば場合の数は増える。これで片方の値を固定できた。計算量が不安だったが、これで勝つる!
この問題は、C問題と違って、ソートしてしまっても必要な情報は失われない。なのでソートする。最大値を選んで x とし、お相手は min(a[i], x - a[i]) が最大のものを選ぶ。その最大値そのものではなく最大にする a[i] が欲しい情報だ。ここは実装時にちょっとつまづいた。小さいほうを最大化する値が欲しいという状況はけっこう複雑だ。とはいえ、単純な答えではあるので、こんな簡単でいいのかなあと少し不安になりながら提出した。

E - Symmetric Grid

奇数のときがめんどくさそう。んー、サンプル2は明らかに無理そうだけど、そうじゃないときにできるかどうかの判定が必要で、これは全然状況が見えない。頑張って少しずつ実験をする。サンプル3の印象もあり最初は相当自由度が高いと思っていたが、試すうちにそれほど自由には動かせないことに気づく。(英小文字ではなく数字で考えるが)1,2,3,4という列と4,3,2,1という点対称なペアを考えたとき、1-4と4-1みたいに「行入れ替えをしても固定されたペア」の逆向き同士のペアが必要になる。
行や列は、並べ替えることはできるが、その中身は変えることができない。相当自由度が低い。ある列と点対称になってくれる相手の列は、仮に入力がランダムで答えがYESだとしたら、ほとんどのケースで一意に定まりそうだ。また、全体が点対称になったとして、左右対称な(複数回も含む)入れ替えをしても依然として点対称なので、けっこう貪欲に端から合わせていっても構成できるのではないかと思った。
難しそうだしとりあえず貪欲を書いて投げてみようと思ったが、書き切れないまま1時間が過ぎた(は?????)。100行くらい書いておかしいぞと思った。簡単だけど面倒なことをしたくない、正直言うと簡単でもない。諦めた。そのくらい酷い状況だった。提出できずに終わった。