2026年5月26日火曜日

東京海上日動プログラミングコンテスト2026(AtCoder Beginner Contest 459)

 Eまで。

コンテスト後のツイート

F - -1, +1

 解説放送を見てAC。

 操作を、「ブロックを右にずらす」というイメージで捉えられると考察が進みやすい問題だった模様。コンテスト中は差分をとって考えている時間が長かったけど、それほど筋が良さそうではなかったのだから、元の問題に戻って絵を描くべきだった。



Codeforces Round 1099 (Div. 2)

 ACの二完で過去最悪順位。青に落ちて呆然自失。

コンテスト後のツイート

B. Another Sorting Problem

 破滅した原因の問題。

 (多少解説を見たけど理解できなかったので)大体自力でAC。

 まず、i<jでA[i]>A[j]なら、iには足さず、jには足さない、しかあり得ないと気付かなくてはいけない。

 ここで、足すものと足さないものを分けて考える。
 足す方、足さない方それぞれは広義単調増加でないと条件を満たさない。

 index iが足す方だとしたとき、それ以降のことを考えると足す値はできるだけ小さい方が良い。それは、それ以前のmax-自分の値である。

 この最大値をkとして良い。

 kが決まれば、具体的に、A[i-1]>A[i]であるようなiについて、A[i]+=kする、というのを左からしていき、それで広義単調増加になるかチェックすれば良い。

 コンテスト中は、kを決めてからもう一回……というようなやり方が見えず、for文一回でどうにかなる気がして嵌ってしまった。
 ただ、解法自体は簡単だが、正当性の証明とか、直感的に理解するのは結構難しい気もする。

D. Maximum Prefix Sums

 自力AC。
 解法はあっていた。十分性をチェックしたらACできた。
 dfsするとき十分性をチェックしていたつもりだったが、漏れていたのね。


2026年5月24日日曜日

yukicoder contest 500

 Cまで三完。


No.3551 Regions by Random Points 2

 自力AC。

 線分と線分が交差する確率が分かれば解けると思ったが、よく分からず。とりあえず、線分で分けられた円周の一方の長さをaとしたときの確率は2*a*(1-a)なので、これを積分してみたらsampleがあったので正解できた。
 公式解説通りだが、積分すればこの確率になる、というのがしっくりきていない。

2026年5月21日木曜日

Educational Codeforces Round 190 (Rated for Div. 2)

 Dまで。Eは惜しかった。

コンテスト後のツイート

E. Minimum Influence

 コンテスト中のコードのセグメント木をSparse tableに変更したらAC。
 TLEしたときは試さなくてはいけないことの一つだったのに、全く思いつかなかった。反省。


2026年5月20日水曜日

AtCoder Regular Contest++ 220

 A一完でさらにレートを落とす。

コンテスト後のツイート

B - Incomplete Shuffle

 解説放送を見てAC。

 グラフの問題だろうとは思ったが、問題特有の考察は全くできていなかった。あまり考察せず解説を見てしまったけど、まずは、操作をした結果どのようなものが現れるか? を実験してから考えていく感じですね。

C - Range Increment

 解説放送を参考にAC。

 解説放送を見ても(他の解説を読んでも)なかなか理解できず、一時間くらいじっと考えたらようやく分かった。

 解説放送に出てくるmod=3で1 0 1のケースより、(実質的には同じだけど)mod=6で1 5 1のケースを考えた方が自分には理解しやすかった。

 解法自体は、左から決めていくしかなくて、単純な貪欲で上手くいかないのなら、heapqか何かを使うかも……と想像することはできるかもしれない。しかし、こういう風な推察から正しい解法に至るのは結構厳しそうなので、じっくり問題の性質を見極めるしかなさそう。


2026年5月18日月曜日

SMBCプログラミングコンテスト #1(AtCoder Beginner Contest 458)

 Eまで。またレート1800を割る。

コンテスト後のツイート

F - Critical Misread

 コンテスト中の方針で大まかなものはあっていたが、どこでWAになるか分からず、ランダムテストでACしている提出と比較した。

 ミスは次のようなものだった。
 たとえば、"bcb"と"c"がある場合に、"bcb"が出たらそもそもいけないのだが、"bc"や"bcb"もノードとして数えてしまっていた。
 そのようなものを削る前処理を行ったらAC。

 Aho-Corasick法を使う場合に、必要になることが多い前処理という気がするが、知らなかった。

 そして、AIに聞いたところ、Failure_pathを利用して"c"に印がついているなら、"bc"にも印がつくようにする、という構築を行うのが一般的らしい。勉強になった。

2026年5月14日木曜日

Polaris.AI プログラミングコンテスト 2026(AtCoder Beginner Contest 457)

 F以外の六完で久しぶりの黄パフォ。Gは公式解法と違うので嘘解法疑惑があるけれど、多分大丈夫?→とりあえず、ランダムテストではHack caseは発見できませんでした。

コンテスト後のツイート

F - Second Gap

 解説AC。
 コンテスト中、maxとsecondのindexを持てばDPできるのでは? みたいなことは考えたのだが、上手く分からず実験をはじめて考察をやめてしまった。
 実験自体は悪くないのだけど、ちゃんと考察しないといけない。

 実際は、maxのindexだけ持ってDP(挿入DPみたいなやつ)できる。maxとsecondを持つDPが書ければ、そこに気付くのは難しくないはず。

 Gが解けたから助かったものの、こちらも解けなくてはいけない問題でした。