D 一つでも奇数があると、Bobはそれを二つ目にもっていけるため、一つずつ計算することになる。2ベキに揃えて回数の総和を求める。一つ一つの数字に関する操作回数はDPで前計算。ただし、最初に足した方が効率が良いものがいくつかあるので、それらも前計算しておく。
— titia (@titia_til) July 12, 2026
titiaのノート
2026年7月18日土曜日
Codeforces Round 1108 (Div. 2)
Dまで。
コンテスト後のツイート
maspyさんの解説を読んでAC。
コンテスト中に、o(v, x)=xのとき以外は簡単なことは分かっていた。そして、こちらができることは、xのbitcountを何個選ぶか? くらいしかなく、それも、一個にするか半分にするか? くらいしか選択肢はない。
しかし、つい半分くらいにするのが最善かな? と考えてしまいダメだった。
方針転換して一個の場合を追及すれば答えに辿り着けた気もするけど、意外と思いつきにくいし、詰めるのに時間がかかりそう。
2026年7月17日金曜日
AtCoder Regular Contest 223
Cまで三完。三完の速解きにはまあまあ成功したが、DやEで迷走した。
コンテスト後のツイート
C mod N で0,1,2,...,N-1となるしかない。転倒数で正負を判定。
— titia (@titia_til) June 28, 2026
D 最初のK枚にドロー0枚、K+2枚にドロー1枚……と場合分けすると思ったのだが。
E 同じ数字が続くところの個数が違ったらNo。それを基準にやっていけばできそうだが実装できず。
D - Xpectation of Cards in Hand with Laboratory
解説放送を見てAC。
経路数とか鏡像法とかいうキーワードを見てもピンと来ずACできなかったので、コンテスト中のACは遠かった。
やることは、
・ドローカードをx軸、普通のカードをy軸としてプロットし、どの経路を計算するかを調べる。
・鏡像法で計算
というだけ。
ただ、そもそも、問題文では全てカードを区別しているのに、カードを区別しなくても良いの? というところから詰まった。
これは、
・A_1 A_2 B_1 B_2 A_3
という区別した順列に対して、
・A A B B A
という区別しない順列を考えると、どんな区別しない順列に対しても、区別する順列はA、Bの並び替えA!B!通りを掛けただけ存在することから分かる。
また、経路数を求めた後、使っていないA、Bの並び替えを掛けなくてはいけないことにもなかなか気付かなかった。
2026年7月16日木曜日
Codeforces Round 1109 (Div. 3)
Eまでしか解けずひどい順位に。
コンテスト後のツイート
Codeforces Round 1109 (Div. 3) FのWAが取れない&Gが分からないで非常に不味い。
— titia (@titia_til) July 14, 2026
A 一番長い#
B 貪欲
C gcdごとに
D 区間ごとのabs
E 差分のxorを取る。一回の操作で二ヶ所変えられる。
F. Anya Loves Trees!
コンテスト中は何かの実装ミスかと思っていたが、考察が間違っていた。
あるノードの子の番号たちが、(9が最大だったとき)
・8 9 1 2
のように、一つながりになっていたら良いと考えていたが、これだと最終的にぐるっと連番になることはできたとしても、1をスタートにできない!
なので、一番小さい数字から初めて、全て連番になっているようにしなくてはいけない。
番号が連続になっているかどうかを判定するのには、左右を管理するやつを利用した。
G. Yura and Deadlines
解説AC。
条件が、iの条件とjの条件の&に分解できるので、iの条件についてセグ木を使ってやりながら、イベントソートでjの条件を処理する。
これはFよりはっきり典型的で優しく、解けなくちゃいけない問題だった。
Fの勘違いは仕方ないところもある。とはいえ、F解けなくて動揺していたとしても、こういうのは取らないと。
2026年7月4日土曜日
yukicoder contest 503
Eを考えていたが解けず、Cのみ一完。
コンテスト後のツイート
yukicoder contest 503のE、任意modでの掃き出し法か~と思って実装していたら、不定方程式の処理に困って解けなかった。
— titia (@titia_til) July 3, 2026
解説を見たら全然違っていてびっくり。ちゃんと考えないと……
No.3580 二成分の和
解説AC。
一目見て、連立方程式だから行列……と思ってしまったが、それが間違いだった。
グラフの問題だと思えば、自然と、連結成分ごとに一つの要素の値を決め打つ、というのが思いつく。
行列で上手くいかないと思えば、この解法に至るのがそう難しい気はしないんだが……。一旦思い込んだものを方針転換するのは難しい。
No.3581 分数対称差更新区間計数取得
TLEが取れず、ChatGPTにPyPy→RUSTに変換してもらってAC。
各クエリにおいて、変更すべき点が√i個に収まるので、BITで管理してACした。
だが、解説を見ると、平方分割した方が高速になるらしい。言われてみればそういう高速化を要求されたことがあった。忘れていた。
2026年7月3日金曜日
CodeQUEEN 2026 予選 (AtCoder Beginner Contest 462)
Fまで。
コンテスト後のツイート
F DP。Kが小さいので、index iまで見て、最後の二文字がj,kで、元の部分文字列よりk(<=K)個ABCが増えているときの最小の交換した個数。
— titia (@titia_til) June 13, 2026
G 攪乱順列(完全順列)の求めかたと同じようにできるのでは? と思い考えていたが、漸化式も包除原理も上手くいかなかった。
G - Completely Wrong
解説放送を見てAC。包除原理で解ける。
Cを並び替えたもののうちk箇所が一致(C_i=G_iとなる箇所がk箇所)しているものを求めたい。
これを、各色ごとに求めて、それを合わせることにより求められる、と考えるのがポイント。具体的には、FFT(畳み込み)を使って計算できる。
最後に、包除原理を用いて、kが奇数のとき-1の係数をかけて足し合わせれば良い。(解説放送では-1を掛けるのをFFTする前にやっていたけど、最後にやってOKですね。その方が分かりやすいと思う)
2026年7月2日木曜日
Codeforces Round 1106 (Div. 2)
Dまで。Eは解法はあっていたので、Fを考えていた時間がなければ間に合っていたかも?
コンテスト後のツイート
E Fを1、Tを0とし、ここまでのF-Tの数をnow、Fの数をcount、F-TのminをMINとすると、count-MINで計算できる。DP[now][MIN]を考えれば良い(countはindexとnowから計算できる)。nowの区間が[-n,n]くらいあるので、幅を2*n取ったら計算回数がn*(2*n)*(2*n)になってTLEした。定数倍改善が必要。
— titia (@titia_til) June 28, 2026
E. Cake Trial
ツイートしていた解法で正しく、定数倍高速化を頑張ったら通った。
時間があれば他の言語に直してACしたと思うけど、そんな時間なかったから仕方ないね。
AtCoderならcodonを使えば通せていたはずなので、あまり気にしないようにしたい。
Codeforces Round 1107 (Div. 3)
Eまで。Fを(実験せずに)考えていたら寝てしまった。
F. A Bit Odd
解説AC。
難しくないか? 実験せずに思いつける気がしないし、実験したとしても規則性に気付くのは簡単ではないと思う。
実験せずに解くなら、一回で勝つための条件は……と考えるのだろうけど、思いつくのは困難に思える。そもそも実験したとして解けていたかもあやしい。
登録:
投稿 (Atom)