Processing math: 100%

2025年6月10日火曜日

yukicoder contest 469

 AHCの途中だったため、Aだけ解いた。

コンテストへのリンク

No.3173 じゃんけんの勝ちの回数

 ツイッターで、フローで解けるというのを見てしまったため、それでAC。(minだけフローを使った)
 解説を見たら、フローを使わなくても解けるのね。

yukicoder contest 468 Desire for Approval ~Ash blown by the draft leads to the door to a new beginning~

 AHCを頑張ろうと思っていたのでAだけAC。


No.3166 [Cherry 7th Tune *] 桜の守人

 解説AC。

 二分探索は分かったが、その後分からなくなり解説を見た。

 分からなくなってしまったのは、全ての整数座標、もしくは整数/2の座標の頂点が守られているか? と考えてしまったせいだった。座標圧縮が必要なはずだけど……などと考えて混乱。
 守る範囲は区間なのだから、[x-p,x+p]に全ての区間が含まれているか? と考えるのは自然。これは、イベントソートを使って解くことができる。

2025年5月28日水曜日

Codeforces Round 1027 (Div. 3)

 全完。若干遅刻したのに良い順位で嬉しい。

コンテスト後のツイート


2025年5月27日火曜日

AtCoder Beginner Contest 407(Promotion of AtCoderJobs)

 ABCDFの五完。コンテスト終了後すぐにGは通った。

コンテスト後のツイート

E - Most Valuable Parentheses

 解説AC。
 結構思いつきにくいと思う。

 別の方針からこの解法へ行きつくこともできるようだけど、
 「index iまでのうち"("は少なくとも何個含まれるか?」という考え方は身に着けておきたい。
 括弧列の定石の一つなのだろうけど、身に着いていなかった。

G - Domino Covering SUM

 自力AC。
 これは焦っていなければコンテスト中に通せていたはず。落ち着こう。

2025年5月26日月曜日

AtCoder Regular Contest 198 (Div. 2)

 Bまで二完。レートが落ちたが黄色には残った。

コンテスト後のツイート

C - Error Swap

 自力AC。惜しいようで惜しくなかった。

 大まかな考察は合っていたけど、詰めなくてはいけない箇所が残っていた。

 左端から揃えていく、という解法でやった。index iを揃えようとするとき、B[i]+1に一番近いA[k]を探して、A[k]が小さいなら左回り、大きいなら右回りに回転させて、B[i]+1になったらクエリ(i,j)を投げる、という方法でやっていた。

 だが、A[i]=B[i]+1となったときに(i,i)と投げられないのが問題だった。(i,N),(N-1,N)とすれば(i,N-1)とできるのだが。ここに気付いていなかった。

 ここを修正してAC。
 あと20分くらいは必要だったか。

D - Many Palindromes on Tree

 自力ACはしたが大変だった。

 問題の内容を理解するのがちょっと大変だが、理解できれば解法そのものは難しくない。(i, j)間の距離が大きいペアから、A[i][j]=1なら、一つ近づけて(i', j')も1にし、Union-findでくっつける、という操作をする。
 その上で、今度はその逆順で答えを構成していく。

 しかし、この順番を構成する部分(上の(i', j')に対して、(i, j)が何かを前計算したりする)の実装で苦戦。さらに、ちゃんと実装してもMLEになり、PyPyでは通せなかった。二次元配列にしていたり、tupleで実装しているのを整数化したりすれば解消されるのかもしれないが……。
 RUSTに直してもらいAC。今回は、Gemini Canvasを使ってみたら、一発だった。

2025年5月19日月曜日

Codeforces Round 1025 (Div. 2)

 C1までの三完。C2を考えていたら寝てしまった。


C. Hacking Numbers 

 こたつがめさんの放送の振り返りを見てAC。
 こんなの思いつかない。初手で掛け算すること自体を考えなかったので厳しい。

D. D/D/D

 自力AC。
 偶奇に分けて、最大何歩歩けるか? 各マスまで最小で何歩でいけるか? を求めればOK。

2025年5月17日土曜日

yukicoder contest 467

 ABCEの四完。Dは、問題の意味がぱっと理解できなかったから飛ばしたけど、分かっても難しかった。


No.3143 Colorless Green Parentheses Sleep Furiously

 WAが出た後、テストケースを見てAC。

 カッコ列が正しくなければダメ、というのはOK。その上で、
 できるだけ少ない個数の1を加えたとき、何個加えることになるかを知りたい。

 ()なら、(1+1)+1にしなくてはいけないが、
 ()()なら(1+1)+(1+1)で良い。

 (())なら、((1+1)+1)+1にしなくてはいけないが、
 (()())なら、((1+1)+(1+1))にする。

 カッコ列の対応を考えて、その対象範囲に自分のカッコだけしかないときは、()+1としなければならない、というのがなかなか気付きにくいポイント。

 実装では、最初に、どの"("がどの")"と対応しているかindexの対応を調べておき、((...))となっているようなら、後ろか前かに+1を置けば良い。

No.3145 Astral Parentheses Sequence

 解説AC。難しい。

 括弧列の個数(カタラン数)をDPで求める方法を応用するとこの問題のDPも導ける。ただ、括弧列の個数を求めるDPがそれほど明らかではないため、それと似た方法でこれもいけるというのは直感的に分かりづらい。

No.3146 RE: Parentheses Counting

 解説AC。難しい。

 解説の最初にある漸化式(三乗の計算量になるやつ)を自力で出そうとしていたが、それすらできなかった。
 ネストの深さが0の部分がカタラン数の積になるっていうところが思いつかない。ここは主客転倒で考えているのか。
 その後の、計算量削減の式変形も難しい。カタラン数が満たす漸化式を知っていればいけるかもしれないが。

 自力で解くには、実験→oeisしかなかった気がする。

No.3147 Parentheses Modification and Rotation (RM Ver.)

 解説AC。

 解説を見てしまったけど、これは自力で解けて良かった。括弧列の累積和(いつものやつ)を使い、最大値・最小値から答えが導ける。
 タイプ1が右回転なのがちょっと引っ掛けな気がした。S[1:]+S[0]だった方が直感的に分かりやすい。