ABC265

5完。あまりにも苦手セット。苦手なのはいいけどC問題までが面白くないのに時間食われて最悪だった。

A - Apple

A問題らしくループを使わない解法がないかけっこう考えたけど思い浮かばず普通にループ。ちょうどなので3個買いの回数を全探索。3個買いの回数を決めると1個買いの回数も決まる。

解説を見るとやっぱり場合分け。場合分けはする気が起こらなかったけど全部見通せてればこれもありだった。力不足。

B - Explore

持ち時間と待ち時間を間違わないようにかなりのエネルギーを使った。シミュレーション。持ち時間は途中でintに収まらなくなる可能性がある。しゃくとりみたくしてボーナス部屋を判定したが、今思うと各部屋でもらえるボーナス量を持っておくだけでよかった(アホ)(Xが昇順になってることに惑わされたなあ)。

提出してWA。長いコードなので見直すにも時間がかかる。持ち時間が0になったらアウトだった(0はセーフだと思ってた)。読んではいたと思うけど、意味を取り違えていた。ここまでで12分と1ペナ。気分は最悪になり、かなり引きずった。

C - Belt Conveyor

シミュレーション。4方向の場合分けが重いけど、まとめて書くべきだったか。ここまで虚無問だけで21分。100分しかないratedコンテストの中の21分。やってられん。

D - Iroha and Haiku (New ABC Edition)

3個なのでとりあえず真ん中を決めてみることにすると、真ん中はしゃくとりで列挙がO(N)、左右も累積和の二分探索でいける。二分探索でどんな数を探すかがややこしくて時間を使う。

解説を見て、決めるのは真ん中でなくてもいいと知る。なるほどなあ。単に累積和に4つ点を打つだけか。このすっきりした構造が見えてないし、真ん中でやったせいでややこしい部分の思考が2倍になった。setを使うのは全く思いつかない。

E - Warp

難しい。FGも読むが、どれも難しい。ここで順位表を見ると、Eがめちゃくちゃ解かれている。意味不明すぎる。そもそも、M=1で答えが3^Nかどうかを判定する問題すら解けない。

3種類のワープをそれぞれ何回使ったかわかれば結果を同一視できることに気づいた(当たり前すぎて何に気づいたのかをうまく表現できないな)。だからこんなに解かれてたのかーと思うがここからも長かった。よくわからないが、とりあえず合計N回以下の全部についてどの障害物の上にいるか(あるいは障害物の上にいないか)を調べる。定数倍が1/6くらい付くO(N^3)とunordered_mapでまあ3秒なら大丈夫。DPだ。ここまで来てなおDPが必要になるのか。合計回数の少ない順に回す。貰うDPで、障害物の上だったらスキップする(どの障害物かは知る必要がなかったけど書き直す時間がもったいない)。それぞれのワープが0回でないときだけ遷移して、合計N個のときは答えの変数に足して、そうでないときはDPテーブルに保存する。178msで意外と速かった。

これ水diffはびっくりだけど、水上位だしDPならこんなもんかなとも思う。それよりも、FGが全くわからないのがつらい。全方位苦手セットだったし、実力が低いことの表れでもある。

F - Manhattan Cafe

(追記)こういう幾何的に(異常難易度で)解けそうなやつをDPで解くの、全く自分の感覚と乖離していて、思いつかないし拒否反応がある。解説を見ればまあDP自体は書けるし、累積和で高速化できそうなこともわかる。しかし、その累積和の実装が異常に難しい。斜め2方向の累積和がきついし、区間を3つに分けて処理する必要があり、それによって累積和の境界がわからなくなる。もう嫌だ。

G - 012 Inversion

(追記)解説を見ると思ったより簡単そう。遅延セグ木。実装しながら詰めていく。転倒数の処理が対称性なくてループで書きづらい。一番の問題は、数を置き換える作用で1,0の個数などがどうなるか。1になるものそれぞれと0になるものそれぞれの関係が何個あったかを足していけばいいが、実装が相当めんどい。なんとかACしたが、解説の実装例を見ると貰うんじゃなくて配ってて、なるほどそうすれば楽だった。

ARC146

2完。ARC前にプロセカのイベスト読もうと思ってたらギリギリ間に合わなかった(8話途中で中断してARCへ)。そういえば先週のAGCで意気消沈してから競プロなんもやってなかった。

A - Three Cards

こういうのしんどいよー。0が含まれる可能性はあるが、最上位桁は0でない。まず、桁数は可能な最大にする必要がある。並べ替えをどうするか。色々(532, 537, 53とか)考えられるので難しい。同じ桁数で考える場合、単に大きいものから使うのがいい。ということは、単に降順ソートして最初の3個を使うので確定だな?桁数が大きいのが優先されるし、選ばれた中で桁数が一番小さいものはその桁数の中で大きいものだ。あとはnext_permutationで全探索するだけ。to_stringで結合してstollで戻す(この辺の関数名未だにパッと出てこない)。

B - Plus and AND

すぐに二分探索を思いつくが、単調性はなさそう。上から決めていけばいい。logが2つ付きそうだと思って実行時間制限を見ると5秒なのでよさそう(?)。上から順にそのビットを立たせることができるかチェックする。やってることは二分探索。M回で実現可能ならそのビットを加えるというか今調べた数に更新する。調べ方は、それぞれ何回の操作が必要か計算してソートして小さい順にK個の和をとりMと比較する(ここなんかありそうだとは思ってたけど、nth_elementの使いどころだったか)。何回の操作でA_iをTにできるかは、上から調べてTで立っててA_iで立ってないビットがあればそこ以下のビット列を取り出して引き算(そのビットを立たせる必要があるので10000みたいのを必ず経由する)。そういうビットがなければ(当たり前だけど)0。提出してWAで、「なんでMが小さいんだろう」「あ、それに助けられてたのか」「いや助かってないじゃん」で30ビットではなく31ビット見るようにしてAC。一応、intで2^31-1までは扱えるので大丈夫そう(今見たら2^31を経由してたけどまあ正しく動作はしそう)。

C - Even XOR

難しいね。要素数が偶数かつxorが0の集合を数えるとしばらく勘違いしていた。まあ考えたことはそんな無駄にならない。数が大きすぎてきつい。一応条件なしに集合が何個あるか計算するコードは(思考が詰まったタイミングで)書いておく。奇数個選んで全体のxorをとる、その数があれば消すなければ加える、というのを思いついたが特に使えなかった。 偶数個でxorが0なのがダメで、部分集合にそういうのが1個でもあったらダメ。しかし空集合は含まないので対称性的にどうなのか(ほんとに計算できるの?)。

夏アニメ第5話

ラブライブ!スーパースター!! 2期 #4

ちさとが部長になるの熱い。かのんが春風どれみ並に強い。四季のことが気になってるとメイはリエラメンバーの前でも緊張してない。

よりもいとラブライブの花田しか知らないから、「有能じゃない花田って何」状態なんだよな。

リコリス・リコイル #4-7

4話。なぞの精度悪い弾。パンツで日常回だ!制服着てるときは目立っちゃいかんのか?制服なら銃出しても捕まらない!?ゆーて末端は事情知らなそうだし面倒なことになりそうだけど。銃を使える身分であることを示すための制服か。トランクスなら堂々と映せるの!?千束がトランクスを試すために脱いでどんなパンツかわかるのいい。

5話。え、リコリコってLとRなんだ。何だこのスカイツリー前回も出てた。旧電波塔テロ。えー知らない側の警察の人と知り合いなの。あーお礼ってそういう。千束が来たときの盛り上がりがすごい。たきなを助けに来たという展開上もそうだし、アニメの勢いも良い。あれもう霊光弾だよ。いや面白い。しゃべり方とかの違和感をきれいに回収していった。

6話。千束の服がかわいい~。たきなが安全のため一緒にいようとするのに千束はめっちゃ喜んでるのひじょうによい。冒頭たきなに足の包帯が残っていて、そこからたきなが助けに入る展開はひじょうにベタ。最後のたきな、同棲とか関係なくジャンケンに勝ったことが嬉しいのひじょうによい。制服でバレる可能性に対する言及があったw

7話。写輪眼対策として足の動きだけで百合の波動がわかる(?)。まだ7話だぞもう会うのか。この「気にすんなよ」は苺ましまろの美羽を思わせる(その裏にあるこのシーンの意味は難しすぎる)。

オーバーロードIV

ドワーフの国へ。必要な描写が済んで次が楽しみ。

ダンジョンに出会いを求めるのは間違っているだろうかIV #3

短く感じた。そんなにいい内容とも思わなかったが。薄暗いシーンが続くのにきれいな画。ヘスティア未だにあの青い紐で頑張ってるのすごいな。

異世界薬局 #4

お前まだ9歳だったんかい!髪も服もボリュームあって見えない。かなり好み。妹より存在感ある。セドリックの声いいな。この父親の距離感がどうも苦手。やや意外な形でタイトル回収した。めちゃくちゃ恵まれた中で開店して既存の勢力がかわいそうにも見えるが。

AGC058

1完。実力をしっかり測れるBやめちくりー。気づいたら2時間経っていた。そこでようやく、自分は天才じゃないからBの解き方がわかってないんだろうと気づいてとても悲しかった。ずっとつらい。

コンテスト前の火消しに「限りなく灰色へ」をやった。

A - Make it Zigzag

昇順や降順の列を手で試して、できそうではある。次にランダムっぽいものを試して、最初の山を作る3個に注目してみる。3個の中で最大のものを高々1回のスワップで中央に持ってくることができて山が作れる。その次は、2個ずらして山を作るか1個ずらして谷を作るか2通りの道があるが、山を作るほうへ行ってみる。すると、同じことができそうだ。スワップをしても左の要素は小さくしかならない。最初に作った山を壊すことはない。気になるのはN=1あるいは最後の2個だが、これも条件を満たすようにスワップして直前の山は壊れない。

B - Adjacent Chmax

2 1 3 4 のケースで 3 4 4 4 となるパターンが厄介。区間DPや再帰を考えるが、結局はそれを解決できなさそう。累積和を持って区間DPというのを、解けた気がして書いていたが、やはり解決していない。これで2時間。それからどうにか体の向きを変えつつ(本当は思考の向きを変えたい)考え続ける。

書きながら考えてたけどやはり上手くいかん。momoken配信観ながらうじうじしてたがさすがに寝るか。無力。

(追記)終了直前くらいに「Ears」(いわゆる耳DP)は思いついてたけど、そのときはわからなかった。解説を(全然わからないけど)読んで、あーたしかに行ける場所は全部行けるかってなって、各要素について左右に自分より大きい数が現れるまで伸ばして区間を前計算しておき、その区間内の区間なら全部できるから、DPすればいい。DPの更新は、区間に入ってるやつだけそこまでの累積和を入れる。