AtCoder Regular Contest 182 ABの後ずっとDを考えていたが分からなかった。
— titia (@titia_til) August 11, 2024
A 左右を見て、それより前に使うものでV_iより大きいものがあってはダメ。それより後で使うものでV_iより小さいものがあってはダメ。
B 二分木
D 難しい場合、端の方は同じ方向に回しそう、から考察が進まなかった。
titiaのノート
2026年1月18日日曜日
AtCoder Regular Contest 182
ABの二完だが、レートは上がった。
コンテスト後のツイート
解説AC。
積の和典型の練習をしようと思って解こうとしたが難しく、解説を読んでもしばらく理解できず非常に苦労した。
公式解説のように積の和典型を適用すると、タワーと積み木の問題と同等になることは分かる。しかし、それがbit DPで表せることが分からなかった。(ChatGPTに聞いたりしつつ悩んだ)
・どこかで積み木を選ぶのだから、積み木を置いたそのときに選べば良い
と考えると理解できた。
たとえば、「6」の積み木を置くとき、それは、2と3の位置に積み木を一個ずつ選ぶことを意味する。
そして、それまでに2の位置や3の位置の積み木を選んでなかったとしたら、このときに選べば良い。
その、既に選んだかどうかでbit DPをしている。
また、最初に積み木が一個ずつ置いてあり、それを選んでも良いので、bit DPの初期値は全て1になる。
こういう考え方でDPを書いたものが、この提出。これを行列累乗で高速化するとACできる。
2026年1月16日金曜日
Codeforces Round 1072 (Div. 3)
ACの二完。Bで詰まって一旦離脱して、最後に戻ってきてもう少し解こうと思ったけどDが間に合わなかった。
B. Hourglass
難しくないか?
mを2*kの余りとした後、sとkの大小で場合分けして考える……という方針は簡単に立つけれど、s=kやm=kのときどうなるか? など注意すべきところが多い。
コンテスト後にも2ペナを出してしまった。
E. Exquisite Array
自力AC。
差が大きい順に見て、Union-findで要素をつなぎ、答えを更新していく。しばらく思いつかず結構時間がかかってしまった……。
F. Cherry Tree
自力AC。mod 3での可能な回数の集合を持って木DP。
この解法はmod 3だからできたもの。maspyさんの解説によると、modが任意の場合にもできるらしいが理解できていない。
G. Nastiness of Segments
自力AC。セグ木+二分探索。問題文がやや難読だが、内容は簡単だった。
結局、Bが一番難しい回だったみたい。
2026年1月14日水曜日
AtCoder Regular Contest 212 (Div. 2)
ABDの三完。
コンテスト後のツイート
AtCoder Regular Contest 212 (Div. 2) ABDの三完。
— titia (@titia_til) January 11, 2026
A 同じ頂点を含まない二辺の和の値を全探索。
B 有向グラフ→ダイクストラ
C 二乗にはなったつもりだが高速化できず。oeisをずっと見ていた。
D 操作は、i行とi列に*-1することに言い換えられる。負の行があったら操作を行う貪欲を繰り返す。
C - ABS Ball
解説放送を見てAC。
積の和典型と言われても全然ピンと来ないし、積の和典型の解法自体も忘れているしで全然ダメでした。
というか、最初この問題を見たとき、積の和典型を使うのでは? と思ったはずなのに、苦手意識があるせいか、そう思ったことを忘れてDPを考えていたのもダメ。もっと練習した方が良さそう。
2026年1月13日火曜日
AtCoder Beginner Contest 440 (Promotion of Engineer Guild Fes)
ABCDFの五完。
コンテスト後のツイート
F SortedMultisetに感謝。丁寧さが1のmultiset、2のmultiset(Bとする)と、機嫌が良い上位len(B)個のmultiset Cと、それ以外Dとを持つ。len(B)の大きさに従い、Cの小さいものとDの大きいものを入れ替えながら計算。定数倍で1testcase通らず、似たコードをたくさん投げたら通った。
— titia (@titia_til) January 10, 2026
E - Cookies
コンテスト中に書いていた方針でAC。
コンテスト中、例題を解いた経験があると思ったが、実際正しかった(どの問題かは探せなかったけど)。そして、Aを降順にソートして、[K,0,0,0,0]からはじめて、一つずつずらしていく探索をすれば良い……という方針もできていた。
ただ、コンテスト中は、Kの値が大きいことに混乱して、[K,0,0,0,0]のような配列で扱えると気付かず、Counterを持ち出していた。そのため実装でCounterのhashを求めなければいけなくなったりし混乱。
そして、hash値を求めているのにその値を使い忘れたり、値が0のときはじくのを忘れたりしてWAが取れぬまま終了した。
コンテスト中は混乱して、正しいことを書いているのか分からなくなっていたけど、落ち着くことさせできればコンテスト中に通すことも可能だった気がする。
2026年1月3日土曜日
Educational Codeforces Round 186 (Rated for Div. 2)
Eまで。終了後F1は通った、と思ったらシステムテストで落ちた。
コンテスト後のツイート
D maxの最後のindexの位置がどこ以下が決まる。
— titia (@titia_til) December 29, 2025
E 貪欲。小さい箱から順に、その箱を使ったとき効率のよい(z-yが大きい)ものを詰める。
F1 必要なpower pに対して、cを使ったら(p-c)*2に更新(それが何個かは持つ)というDPで通った。TLEのつもりで書いたけど、よく考えたら計算量落ちてそうかも。
F2. Christmas Reindeer (hard version)
自力AC。見直したら難しくなかった。
各桁について、何個使うのがギリギリなのかが分かるので、ギリギリのときと、それ以上が確定したときに分けてDPしていく。ギリギリのときは何個使えば良いか? が分かるので、それより大きい個数を使うときは確定。同じ個数を使うときはギリギリ。二項係数で計算する。
これも桁DPの一種といって良いかな。
コンテスト中、30分残っていたら解けて良かった気もするけど、問題把握に結構時間かかってしまったなぁ。
2026年1月1日木曜日
yukicoder contest 286
Cまで。
No.1425 Yet Another Cyclic Shifts Sorting
自力AC。
二種類あれば隣接要素SWAPができそうなので、答えは高々2。0回の判定は簡単なので、1回でできるかどうかを調べれば良い。
一回でできるかどうかは、ソートした配列と比較し、最大値が一致していれば消していく。
残った配列について、ソートしたものを巡回したものになっていれば良いので、ローリングハッシュを使って判定した。
が、解説を見たらもっと簡単にできたらしい。なるほど。
ところで、なぜタグが「動的計画法」なのだろう? 解けたと思った後タグを見たらそう書いてあって、何か間違っているのでは? と疑心暗鬼になりながら実装した。
(タグに頼るのはいけないかもしれないけど、yukicoderのタグはいつも出したまま問題を考えています)
No.1426 Got a Covered OR
解説AC。
A_iが全て正、という条件の扱い方が難しい問題。
包除原理で扱うのかな? とは思ったものの、DPで包除原理でやるのかと考えてしまってダメだった。
・範囲を分割できること
・それぞれの範囲について、二項係数を使って計算していける
ことに気付ければ解ける。
bitの中で条件を満たさないものの個数で包除すれば良い。
方針が分かれば難しくない。何で包除すれば良いかを考えるのが大切だった。
No.1427 Simplified Tetris
解法は自力で分かったが、ACするのは苦戦した。
盤面が与えられたとき、ちゃんと置けるかどうかは、この問題と同じ。
なので、元の盤面の候補を全探索したい。
ブロックが入っているマスの前後に何マスあるか? をDFSで調べれば良さそうだが、何列必要かが分からない。高々2列で十分だろう、と思ったらWAで、3列必要な場合があった。
そして、それで全探索するとTLEしてしまったため、ずるいけれど時間で打ち切る処理を入れてAC。
解説を見ると、もっと上手にやる方法が書いてあった。気付かなかった。
2025年12月29日月曜日
Good Bye 2025
Eまで。
コンテスト後のツイート
D maxと小さいものを対戦させていく。残りがm*2になったら順番にやる。しばらく部分和問題とか考えて迷走。
— titia (@titia_til) December 27, 2025
E 同じ和の二つに分けると、短い方に答えがある。Flatten操作でmaximalにしか操作しないことを見逃していたせいでずっと解けなかった。
F. Conquer or of Forest
コンテスト中に考えていた方針でAC。
まず、白いnodeと親nodeを切る。
そして、それらを一列に並べれば条件を満たす。(どのnodeからどのnodeへ繋いでもOK)
結構人工的な条件なので、そこから何かを考えようとするのではなく、それっぽい必要条件を探すのが大事だった。
一列に並べた結果、問題文の条件を満たす証明は分からないけど、それっぽくはなっている。
コンテスト終盤にこの条件では? と思ったが、数え上げが間に合わなかった。
・ROOT以外の連結成分について、どの頂点を親と結ぶか
・葉以外の連結成分について、どの頂点を親にするか
・ROOTと葉以外の連結成分について並び替え
を掛け合わせればOK。
三番目がよく分からず時間切れ。
(連結成分数)!みたいなのがいるとは思ったのだが、(連結成分数-2)!だったとは。落ち着けばできたと思うけれど、この条件自体が正しいという確証もないこともあり落ち着けなかった。
登録:
コメント (Atom)