AtCoder Regular Contest++ 216 AとCを行ったり来たりしていたが一問も解けなかった。
— titia (@titia_til) March 22, 2026
A ランレングス圧縮したとき、xをa+1+bに交互に変換できる、という操作と言い換えたが上手くいかない。
C 小さい数字から考えたい。0と1だけでも、0の個数の偶奇が絡んで上手くいかない。
titiaのノート
2026年3月26日木曜日
AtCoder Regular Contest++ 216
一問も解けず。
コンテスト後のツイート
解説AC。
既出で解いたことのある問題だった。
時間が経っているので忘れているのは仕方ないし、この解法を思い付くのは難しいと思うので仕方ない面もあるが、初手の隣接xorを取るところすら思いつけなかったのはまずかった。
隣接xorを取った後の処理も思いつきにくいが、偶奇に着目するのはやってみなくてはいけない。
定石の組み合わせではあるのだが、調子良かったとしても本番中に自力で思いつけた可能性は低かった気がする。最初に問題を見たとき、これ既出じゃないの? と思ったので、その疑いに従って検索した方が良かったか?(とはいえ、見つけるのは至難のわざという気もする)
2026年3月25日水曜日
AtCoder Beginner Contest 450
ABCDFの五完。なんとかFを解けて良かった。
コンテスト後のツイート
E 予めS_Nの長さを求めて、[l,r]のrに近い最も大きいindexを使って、再帰で小さい方へ帰着できると思ったがTLE&REが出てダメ。
— titia (@titia_til) March 21, 2026
F 遅延セグ木DP。戻って良いという条件のもと、1からNへ辿り着く方法を求めたい。スタート地点を2^Mとし、x→yが来たら、[x,y]を半分にし、yにその分を加算。DP[N]が答え。
E - Fibonacci String
コンテスト中のコードを修正してAC。
コンテスト中に見逃していたのは、[L,R]の文字の個数は[0,R]の範囲のものから[0,L-1]のものを引いて求められるということだった。基本的なことだけれどなぜか忘れて最後まで気付けなかった。
[L,R]のまま扱おうとしたことでlが大きい場合にREになるコードになっていたのも本質的にまずい。これも、ここを直すと自然と修正された。
これでREが取れ、再帰の変数を一個減らすことができ、メモ化再帰を用いてcodonでAC。
しかし、PyPyではACできず、なぜ? と思ったが、メモ化再帰で使っているdictのせいで遅くなっていた。
再帰の回数は少なく、あえてメモ化する必要はない。各段階での文字の個数は前計算できるので、それを使えばPyPyでもACできた。
2026年3月21日土曜日
yukicoder contest 494 オムニバス
Cのみ一完。Dを最初に考えたが分からずCに行ったのだが、Dを分からなかったのはまずい!
No.3476 {2^n-1}-gon
円の中心を含まないものを引く。
円の中心を含まないものは、最も左の点を固定し、そこから半周以内にM個全てが収まっているようなもの。
全体の個数も、引くものも二項係数で求められる。
これ、概ね最初に考えた解法だったのだが、なんでNは2ベキ-1なんだろう? とか、引く数はこれで良いのだろうか? などと考えてしまい混乱。もっと落ち着いて自然に考えていれば解けたはず。
No.3474 Concat Decimal
自力AC。これは普通に解けた。
全ての(i, j)でなく、i<jなるペアのみなのがちょっと引っ掛けっぽいですね。
No.3473 AtCoder < CMS
解法ツイートを見てAC。自力では分からなかった。
2^M-1を含む場合を考えると、各bitごとに、0/1を割り振るもののうち、全て0を除いた場合の数と一致する。(ここが分からなかった!)
あとは、2^M-1を何個含むか考えれば良い。
式変形をすると二項定理が使える形になるので、それで計算すれば解ける。
難しいが、解けないのはダメ。
No.3477 Yet Another LIS Triangle
自力AC。
これは簡単でした。
No.3478 XOR-Folding Primes
自力AC。
2,k,k+2という素数の三数がたくさなあり、その間を行き来するしかない。
素数を列挙した後、行き先を考えてDP→行列累乗で解ける。
Mまでにkが含まれるがk+2が含まれない場合、2→kみたいな行き方がありうると思ってしばらく悩んでしまった。このときは、P_iがk+2になるので、ありえないのですね。
2026年3月8日日曜日
AtCoder Beginner Contest 448
Eまで。D・Eとも若干苦手な問題だったとは思うが、時間かかり過ぎてしまった。Eを飛ばしてFへ行った方が良かったか?
コンテスト後のツイート
AtCoder Beginner Contest 448 Eまで。D、E両方に苦戦して破滅。
— titia (@titia_til) March 7, 2026
C セグ木
D 座標圧縮してdfs。dfsは苦手意識があるが思いつけて良かった。(が、時間かかりすぎ……)
E mod 10007*M*9で上手くいった。行列累乗とか考えて苦戦。
F Moじゃダメだから2-opt焼きなましかなぁと考えていた。Moでいけるの?
F - Authentic Traveling Salesman Problem
自力AC。
コンテスト中、Moじゃダメだと思った理由は、MAX=2*10^7として、MAX√MAX>10^10だからダメだと思ったせいでした。
MAX√Nと比較しないとダメですね。
ただ、コンテスト後の実装でも、ミスで3ペナしてしまったので、コンテスト中にEを飛ばしていたら必ず通せていたとも言えなそう。
2026年2月27日金曜日
yukicoder contest 493
AHC中だったのでAだけ解いて撤退。
Bは読んで多少考えたので、すぐ解けたのなら解いていたと思うが。
No.3448 ABBBBBBBBC
解法は自力で分かったが、WAだったためテストケースを見てAC。
こういうのを合わせるのどうすれば良いんだろう? 本番ならランダムテストを書いて頑張ると思うが、短時間で解ける気がしない。
割り算の感覚(商と余りなど)が重要そうだけど。
2026年2月25日水曜日
AtCoder Regular Contest 215
Cまで三完。良い成績とはいえないが、ARCで黄パフォを出せたのは久しぶり。
コンテスト後のツイート
B 各数字を0と1で塗り分け、数字が異なる間に仕切りを入れる。できるだけ同じ色にしたいので貪欲。
— titia (@titia_til) February 22, 2026
C (x,y,z)と(a,b,c)についてa>=x or b>=y or c>=zなら勝敗が付かないのでUnion-findでくっつける。くっつけたあと、(min(x,a),min(y,b),min(z,c))にして良い。x,y,zについてソートし大きい方から処理。
D - cresc.
解法ツイートを参考にAC。
Aの一つおきの配列が広義単調増加になることはコンテスト中に気付いていた。しかし、それだけだと重複があってダメ。
じゃあ、重複をなくすためどこか固定・場合分けすればいいのでは? と考えるのが重要。
A[0]=0とした場合、A[1],A[3],...は全ての広義単調増加列を取りうる。
それ以外の場合、A[奇数]の最後の値がMにならなくてはダメ。なぜなら、A[偶数]を全てー1したものが同じ配列を作るから。
これで重複なく全て数えられているので、二項係数を使って計算できる。
初項を固定・場合分けする発想がもてれば決して難しくないし、重複をなくすためにどこか固定してみようと考えるのは自然。
今見ると難しくない気がする。
また、二項係数の何か(積か和か)になりそうなことはコンテスト中から見当がついていたし、実験コードも書いていた。
それで解けないのは、こういう二項係数を使う数え上げに苦手意識があるのかなぁ、と思ってしまう……。
E - CNOT Party
悩んだが自力でAC。
・最初にできるだけ0→1にする
のは最適そう。なぜなら、逆の手順をやれば1を0に戻せるので。
コンテスト中は、その後、今作ったトポロジカルソート順の逆順? などと考えてしまいダメだった。
この後、
・1→0にする部分は別の問題
と捉えると分かりやすい。こう思いつくのが重要だった。
すると、B[i]=1のものは最後まで残ると分かるので、そこを根としたトポロジカルソートの逆順を考えれば良い。
ただし。x_i=y_iなるものがあればそれも起点になることに注意。
その順に1→0に戻していけば答えになる。
F - Scapus
自力AC。
直径は明らかに良いパス。
そこから考えると、直径上に通らなくてはいけない点が何点かあり、それを含む全てのパスが良いパスになると分かる。
あとは通らなくてはいけない点が一点になるかパスになるかで場合分け。
パスの場合は、二つの端点から距離xでいける点の個数は何個あるかを調べ、それらを足し合わせれば良い。これが畳み込みの形になり、FFTが必要になったのにはびっくりした。
一点の場合も同じなのだが、畳み込みの際の配列の長さを意識しないと計算量が落ちない。そこを気を付けて実装したらACできた。
実装は面倒だが、割合素直な発想で解ける問題だった。
AtCoder × Engineer Guild オンサイトコンテスト ~ACからはじまる27卒キャリア~予選 (AtCoder Beginner Contest 446)
全完できた。
簡単めの回とはいえ、全問解けると嬉しい。Gは想定の計算量ではなかったようだけども。
コンテスト後のツイート
F 可能かどうかは、max(fr,to)ごとに辺をもっておき、グラフを更新していく。可能な場所が増えたらDFS。消す個数は、iまでの頂点から行ける頂点を列挙。
— titia (@titia_til) February 21, 2026
G DPで更新する候補が多くなさそう。候補を持っておき、indexが進むごとに候補を減らした。次の場所をbisectで探したらTLE。bisectをなくしてAC
登録:
コメント (Atom)