2025年3月9日日曜日

Codeforces Round 1005 (Div. 2)

 Dまで。

コンテスト後のツイート

E. Mycraft Sand Sort

 解説AC。
 簡単なのかと思ったら、全然簡単ではなくて、解説など色々参考しても理解するまでずっとかかってしまった。(なお、解説の方法は理解していないし、自分がやった方法に嘘の疑いもある)

 Cは与えられたものと同じものを使うしかなく、Pの個数を求める。

 P_iとP_jが交換可能なのは、

・iとjが隣接しており、同じ色なとき

 だけではなく、

・iとjが同じ色で、iとjの間にあるもの全てが、P[i]やP[j]より小さいとき(これは、上の条件を内包している)

 と気付かなくてはいけない。

 コンテスト中はここにも辿り着いていなかったが、それをどう数え上げれば良いかが難しい。

 解説とは(多分)違う、左右を管理する方法でやった。

 P[i]が小さい方から見ていき、隣合っている同じ色がどの範囲までか、を見て、その要素数を答えにかける。その後、index iを削除する。

 削除というのは、左右を管理し、

・RIGHT[LEFT[i]]=LEFT[i]
・LEFT[RIGHT[i]]=RIGHT[i]

 のようにするということ。まあ、左右を管理するときはよく使う手法ですね。

 ここで、毎回同じ色がどこまでか? を調べるとTLEするので、Union-findでくっつけ、Unionできる端の値をもっておく。
 しかし、そうすると、その端の値は既に消えていることがある。そのときは再計算(消えていないindexまでLEFT,RIGHTをたどる)してACした。

 最後の再計算するところの計算量が怪しいけれど、今回はACできた。危ないテストケースはありますか?




 

2025年3月8日土曜日

yukicoder contest 459

 ABの二完。Cを考えているうちに寝てしまった。Cは一応自力で解けたけど、寝なかったら解き終っていたかというと微妙なところ。


No.3050 Prefix Removal

 自力AC。

 もし、Aの要素全てを使い切るとすると、満足度の変化は、

・最初の操作で全てのiに対して+A[i]
・選ぶpより大きい全てのiに対して+A[i]

 のようになる。
 これを最大化するためには、Aの後ろからの累積和を取って、大きい方から選んでいけば良い。ただし、最初に0を必ず選ばなくてはいけないことに注意。

 ここまで分かったら、後はAのうち何個使うか? という部分。
 これがなかなか思いつかなかったのだが、heapqを使えば全探索できることに気付いた。やや思いつきにくいし面倒ではあるけれど、何度もしたことがある方法だった。

 上手くやれば全探索できるのでは? と考えてみなくてはいけないねぇ。

 

No.3051 Make All Divisible

 テストケースは見たけど、一応自分で考えてAC。

 まず、

・sum(A)がkで割り切れる
・max(A)<=sum(A)/k

 のとき、この操作で全てを0にすることが可能(ということは考えているうちに思い出した)。

 なので、各A_iをA_i%kに置き換えた数列でこの条件を満たせば一番良い。

 そして、満たさない時は、現在のAの中で最も小さい数で、かつ、+kしても最初のAの値以下であるようなものに+kして、条件を満たすかを見ていく。

 計算量は分からなかったが、この方法でACできた。


 




2025年3月7日金曜日

Codeforces Round 997 (Div. 2)

 Cまで三完。


D. Unique Median

 こたつがめさんの放送の振り返りを見てAC。アイディアは自然だが難しい。解法を理解するまでに、三回放送を見返した。

 コンテスト中は、中央値が1~10それぞれになるときに、場合の数を求めるという方針を考えていた。
 中央値がaのとき、aを0、a未満の数を-1、aより大きい数を1としたとき、(1の個数と-1の個数の差)が(0の個数)/2切り捨て以下になれば良い、というところまでは分かったが、数え上げに持っていけず。

 そうではなく、k以下で-1、kより大きいとき+1として、累積和を取らなくてはいけなかった。
 こうすると、区間和が0のとき、k以下のものの個数とkより大きいものの個数が等しくなるため、goodでない配列の個数を求められそう。(Zero-Sum Ranges系の処理ですね)
 これに加えて、「kが中央値になるため区間内にkが存在する」という条件が必要になる。これは二分探索で処理できる。


2025年3月1日土曜日

yukicoder contest 458

 Eまで五完。Eまではすらすら解けたが、Fが分からず考えこんだところで睡魔に襲われてしまった。


No.3040 Aoiスコア

 自力AC。

 DPを考えていたがうまくいかず、三頂点のpathなら列挙できると気付きAC。
 結構苦戦した。眠りに落ちる前に一度解けたと思ったが、そのときはDPを考えており、それではダメだった。

No.3041 非対称じゃんけん

 解説AC。

 bitsetの利用は考えたけれど、bit_countの部分が速くならないためダメだと思ってしまった。その部分も1/64になるんでしょうか?
 PyPyではTLEだったけれどPythonだとAC。

No.3042 拡大コピー

 自力AC。

 こういう問題で重心を考えるのは定石ですね。

No.3043 括弧列の数え上げ

 苦労したが自力でAC。

 括弧列の個数がカタラン数であることは分かっているので、calc(x):長さxの括弧列Sのf(S)の総和を、最初の(と何番目のindexが対応するかで場合分けして計算した。

 一番外側で"("と")"が対応している長さxの括弧列Sたちのf(S)の総和は、長さx-2の括弧列たちの総和に、その個数*(x-2)/2(閉じカッコの数)だけ足したものとなることを利用した。

 難しかったし、解説の方法も簡単ではない気がするのだが、AC人数を見ると解けなくてはいけない問題だったのか。

No.3044 よくあるカエルさん

 自力AC……と言っていいのかな。

 「すごろくであるマスに止まる確率」と検索したら、DPで求められるということが出てきて、それなら行列累乗で求められると気付いた。
 検索しないとDPと気付かなかったのは良くない。

No.3045 反復重み付き累積和

 解説AC。

 解説を参考にしたけど、行列ベースで考えていた。

 長さ4の数列A(1*4の行列として見ている)に対して、重みkの累積和を一回取る操作は、

1 k k^2 k^3
0 1 k     k^2
0 0 1     k
0 0 0     1

 という行列を右からかけることに対応している。

 このx乗がどうなるかというと、実験すると、これらのk^nなどのところに、Combi(n+x-1,x)という二項係数を掛け合わせたものになる。

 のだが、これだと三乗になってTLE。

 解説を見ると、この行列計算はFFTで計算できるらしい。
 それを見てAC。

 行列計算のうち、どのようなものが形式的ベキ級数的に表せるのかを知っていると良いのかもしれない。


2025年2月25日火曜日

鹿島建設プログラミングコンテスト2025(AtCoder Beginner Contest 394)

 Fまで。Gも解法はあっていた。

コンテスト後のツイート


 G、unratedだったから提出しなかったけど、ratedだったらどうしただろう。多分提出していたと思う。
 ChatGPTにプログラミング言語の変換をしてもらう→自分で修正、は許されていると思っているんだけど……。

 ただ、ルールにある文言を入れても、忠実に変換してくれなかったり、元のコードのコメントアウトしろ、っていうのを無視されたりする。また、そのままでは動かないコードが出てくることも多い。
 意図通りの変換になることはそれほど多くないよね。

yukicoder contest 457

 AHCの最中だったため、Aだけ解いて撤退。


No.3028 No.9999

 一見、何も分からなかったが、タグの「循環小数」というのを見て、循環節の長さと一致することに気付く。
 それでも分からなかったので、ChatGPTに解き方を聞いてみたところ、コードを教えてくれ、そのままAC。

 $10^L=1$(mod $x$)を満たす最小のLは10のxに対する位数と一致し、これはトーシェント関数の約数のうち最小のものなので、トーシェント関数の約数のみを試せば良い、という解説も分かりやすい。

 トーシェント関数のライブラリも、自前のものよりこっちの方が良いのかと、考えてしまう。

No.3029 オイラー標数

 setにソートしたものを放り込んでいき、AC。

 クエリの与えられ方の意味がぱっと分からなかったけど、三角形をなす三頂点をどんどん与えられているということなんですね。

2025年2月16日日曜日

yukicoder contest 456 オムニバス

 Cまで三完。


No.3022 一元一次式 mod 1000000000

 解説AC。だが、解説を読んだ後も混乱した。

 整数論の問題なので、2と5に分解してどうにかするしかない。Mに2や5の素因子が多いとダメそう……というところから、整数解が存在する条件が得られる。

 すると、両辺を2や5で出来る限り割ることで、

・N'*k+M'=0(mod d')

 という形の式になり、N'とd'は互いに素になる。なので、オイラーの定理を使って-M'/N'の値を求めることができる。

 この値が0になるのは、そもそもM'がd'の倍数のとき。なので、N*kがd'の倍数になれば良い。N'とd'は互いに素なので、このときはd'が答え。

No.3024 全単射的

 自力AC。

 二部マッチングだからフロー! と思ったが、うまくグラフが構築できず、よく考えたらUnion-findで解けると気付きAC。

 しかし、公式解説の解法はフローで解いていた。景品だけでなく、人の方も頂点にすると思いつけなかった。

2025年2月14日金曜日

Codeforces Round 1004 (Div. 1)

 AB二完、だった。が、AはinteractorのバグでACになっていて、正しいinteractorだとWAだったらしく、WAになっていた。このブログを書いている2/14現在、レートも、当初は+1だったのが-76になっている。


UPD3: After the analysis, it was determined that this problem affected a small number of participants. There are no submissions that get AC with the correct interactor and erroneously received a non-AC verdict earlier. Therefore, the following decision was made:

If your solution worked with the old interactor, but does not work with the correct one and your rating has decreased, then the round will be unrated for you.

 に該当するためこれが正しければunratedになるはずだけど、この後、unratedになりレートが戻るのだろうか?

コンテスト後のツイート

A. Object Identification

 自力ACだが、本質的な考慮漏れがあった。

 自分のツイートの方法で大体良いのだが、「値が違ったり両方1だったらA」の「両方1だったら」というところがおかしい。両方n-1未満なら、などとしてAC。

 ここでは、1とnが巡回する場合を考えている。1とnだけが巡回するなら両方1だが、1→2→n→3→1なら距離2で巡回するわけで、距離1だけで巡回するわけではない。
 コンテスト中は距離1で巡回する場合しかありえないと思っていたので、本質的な間違いだった。

 本質的なミスでWAになっているのだから、システムテストで落ちたときと同じ気持ちで、レートが下がったとしても受け入れるべきか。

D1. Club of Young Aircraft Builders (easy version)

 自力AC。

 実験したら二項係数そのままだったので、それを使ってAC。
 あと10分あれば解けていたと思うけど、なぜ二項係数になるかは分かっていない。



2025年2月11日火曜日

AtCoder Regular Contest 192 (Div. 2)

 BCの二完。

コンテスト後のツイート

A - ARC Arc 

 解法ツイートなどを参考にAC。
 コンテスト終了直前に4の剰余で場合分けすれば良いことには気付いたので、時間があれば自力で解けたとは思う。

 しかし、誤読に気付いた後、10分くらい時間はあったのだが正しい解法にはたどりついていなかった(10分くらいかかって4の剰余で場合分けすれば良さそうなことに気付いた)ので、4で割って2余る場合の考察にはもう少し時間を要したと思う。
 惜しい、という感じではなかった。

D - Fraction Line

 解説AC。

 素因数別に考え、後でまとめられるということに気付けば難しくない。しかし、この部分は結構非自明な気がする。
 ただ、こういう問題で素因数ごとに考えるのは定石の一つなので、それでできるのでは? と疑い、実験してみるべきだったか。

2025年2月10日月曜日

日本レジストリサービス(JPRS)プログラミングコンテスト2025#1(AtCoder Beginner Contest 392)

 Fまで六完。だが、Fまでも時間がかかり過ぎだし、Gも解けなくてはいけない問題だった。

コンテスト後のツイート

G - Fine Triplets

 まず、類題(このC)をやっていたのに、それを生かせなかったのがまずい。
 いや、FFTを最初考えたのは類題経験があったからかもしれないが……。FFTを思い付き、しばらく考えたにもかかわらず棄却したのはひどい。

 類題の記事でも書いた、「登場回数の配列同士を畳み込めば、二つの配列の和の要素の登場回数になる」が本質。頭に入れておかねば。






2025年2月3日月曜日

AtCoder Beginner Contest 391

 Eまで五完。

コンテスト後のツイート

F - K-th Largest Triplet

 解説AC。

 Kの制約に気付いていたら正解できたと思う。こういう致命的な制約見逃しはあまりやったことなかったのだが。

G - Many LCS

 自力AC。

 LCSを求めるのにDPが必要なので、この問題もDPで解くしかなさそう。
 N<=10という制約を見て、bit DPなどを考えたがちょっと違った。「i文字の部分列を構成するときの最短のindexはどこか?」を考え、それをDPのキーとしたいと考えると、それは単調増加なのでindexの部分集合の個数しかない。これを利用すれば解ける。

2025年1月28日火曜日

Ethflow Round 1 (Codeforces Round 1001, Div. 1 + Div. 2)

 Cまで三完で紫に落ちる。

コンテスト後のツイート

D. Balanced Tree

 こたつがめさんの放送の振り返りを見てAC。

 全方位木DPが必要などと思っている時点で解法には遠かった。
 (全方位木DPのためにトポロジカルソートはしていたが)根付き木にして考えて良いということも分かっていなかったため、正しい解法まではかなり遠かった。

 惜しいところまで行っていないため、まず根付き木で上手くいかないか考えましょう、くらいしか言うことがない。

E1. The Game (Easy Version)

 こたつがめさんの放送の振り返りを見てAC。

 コンテスト中に似たことは考えていた時間はあった気がするが、まとめられなかった。ただ、実際の敗因は、実装(LCAと比較する)が思い浮かばなかったことだと思う。この放送を見たときも、まず思ったのは、実装どうやるんだろう? だったので。

 木の問題で、subtreeについて問われているのだから、LCAを考えるのは自然。そこを元に考えていたら正しい解法を見つけられたかもしれない。



2025年1月27日月曜日

AtCoder Regular Contest 191 (Div. 2)

 Bまで二完。

コンテスト後のツイート

C - A^n - 1

 解説AC。

 オイラーのトーシェント関数などを考える方針は悪くはなかったようだが、そこからどうすれば良かったか。原始根などに関する知識がもっとちゃんとあれば良かった?

 想定解の方はどうやって思いつけば良かっただろう。
 実験はしたがそこから進めなかった。n乗が絡むので、二項定理に思いを馳せるべきだったか?
 

D - Moving Pieces on Graph

 解説AC。

 場合分けがちゃんとできたとしても実装で引っかかる部分が多く、難しい問題だった。2nd shortest pathを求める必要がありそうだが、実際は必要ない……といったあたりも混乱しやすい。
 



2025年1月26日日曜日

AtCoder Beginner Contest 390

 ABCEの四完。

コンテスト後のツイート

D - Stone XOR

 冷静にDFSを書いてAC。
 全探索する問題なのは制約を見れば分かる。あとは、どうやって書くかなのだが……。コンテスト中は、部分集合ごとにbit全探索しており、「ただ全部見る」というのより明らかに時間がかかっていた。

 DFSし、今ある分け方のどこへ次の要素を加えるか? を見るようにしたらAC。制約が厳しいのか? と思ったけど、PyPyでも問題なく通る問題でした。


F - Double Sum 3

 解説AC。

 コンテスト中にあまり考えず、コンテスト後すぐ解説を見てしまったけど、主客転倒と言われれば確かに、となる問題。

 [L, R]のLの方を基準に考えるのは自然だし、A[i]=Lとなる範囲はどれくらいか? と考えるのもそんなに思いつきにくい感じはしない。
 Dを中心に考えていたとはいえ、問題を読んだのなら解けなくてはいけない問題でした。反省。

2025年1月25日土曜日

Codeforces Round 1000 (Div. 2)

 Dまで四完。

コンテスト後のツイート

E. Triangle Tree

 苦労したが、公式解説など色々参考にしてAC。

 まず、木DPでできそう、と思ってしまったのが筋が悪かった。
 主客転倒的な考え方でいくべきだった。

 その後は、うーん、どうすれば良かったんだろう。
 min$(d_u$, $d_v)$ の総和と、$d_{LCA}$の総和に分けて考えれば良い、というのは立式を見れば分かるが、その時点でちょっと思いつきにくい。

 さらに、それぞれの求め方も簡単とは言えず……。


 とはいえ、立式し、式を簡単な形に分解しようと思う部分は自然。
 その後、主客転倒でいこう、と思えるかどうかが勝負なのかな。
 



2025年1月23日木曜日

Codeforces Round 998 (Div. 3)

 Eまで。Div. 3なのにFから難しい……。


F. Multiplicative Arrays

 こたつがめさんの放送の振り返りを見てAC。理解した後でも難しい気がするが……。

 二項係数でどうにかする問題というのは分かるが、そこで止まってしまった。

 たとえば、k=6でn=4のときの場合の数は、2を入れる位置と3を入れる位置を考えて、4*4となる。なので、n以下のを足し合わせる場合、4*4+3*3+2*2+1*1=30となる。

 ……のように考えて、上手くいかなかった。


 このように考えるのではなく、数字を入れる箇所を何個にするか? と考えると二項係数の和になり高速化できる。
 先程の6の場合だと、[6], [2, 3], [3, 2]の三通りがある。

 [2, 3]の順で入れるとすると、Combi(4, 2)通り。n=3, 2, 1の場合を考えると、Combi(3, 2), Combi(2, 2), 0通りとなり、その和は(公式により)Combi(5, 2)と計算できる。

 単純に素因数分解するのではなく、何をどういう順番で掛け合わせてkにしたか? と考えなくてはいけなかった。

2025年1月22日水曜日

ALGO ARTIS プログラミングコンテスト2025 冬(AtCoder Heuristic Contest 041)

 413位という苦しい成績。

コンテスト後のツイート

 高さ10の頂点をできる限り増やしたい、というのは分かるのだけれど、どうすれば実現できるか分からず上手くいかなかった。
 山登りなども考えた(し、どうやらそれをやった方が良いスコアが出たらしい)が、子たちも一斉に変えなくてはならないず、高さが10より大きいものが出た場合どうすれば良いのか? というあたりで躊躇してしまった。


 このツカモさんのツイートを参考に、コンテスト後に話題になった貪欲を実装してみた。

 根にできるだけ小さい値を割り当てたい、という気持ちは良いのだが、そのために、「Aを小さい順に見て、全点にいきわたるよう必要なだけ取る」、というのではなく、「Aを大きい順に見て、その点がなくても全点にいきわたるようなら除く」としているのが技巧的に感じた。
 ただ、その方法にさえ気付けば後は自然ともいえるか……。



 コンテスト中どうすべきだったかは悩ましい。

 自分がコンテスト中考えていた方とこの貪欲解法は結構似ているので、そこへ辿り着けたら良かったのだが、上手くいかなかった。

 DFSを試すべきだったとは思うけど、普段再帰でのDFSを書いていないため、解説放送にあるようなDFSにはちょっと慣れていないんだよね……。解説放送のDFSを再現するのに時間がかかってしまった。それだとあまり良いスコアが出なかったので、DFSの良さに気付くのもそんなに容易でなかった気がする。

 シンプルな解法を考えて、山登り/焼きなましなり、ビームサーチなりを試す、という方針の方が良かったのかなぁ。

IAEPC Preliminary Contest (Codeforces Round 999, Div. 1 + Div. 2)

 Eまで。

コンテスト後のツイート

F1. Kevin and Binary String (Easy Version)

 端から貪欲で良いという情報を目にしてAC。

 ツイートにも書いた通り、コンテスト中も端から貪欲で良いのでは? と思ったのだけれど、「SとTで端に同じ文字があったら消去する」という処理を入れていたためWAになっていました。
 いやこれ、まずいかも、とは思ったのだけど、検討したら大丈夫に思えたため、実装の都合で入れたんですよね。実際はそれほど実装が楽になるわけでもないのに、無駄な処理を入れたためWAになったのは悲しい。ACしなくてはいけない問題でした。

yukicoder contest 300

 ABの二完で終わってしまった。


No.1552 Simple Dice Game

 Writer解説とほぼ同じことを考えていたのに詰められなかった。
 解説中の、

 ベン図を考えれば、最小値が $L$ 、最大値が $R$ の数列の個数は、
・$(R-L+1)^N-2(R-L)^N+(R-L-1)^N$
 と求まります。

 という部分。この式がもっと複雑な包除原理の式になる気がして悩んでいた。

 (今回は二つの集合だけの単純な場合だけど)包除原理を使う問題は苦手なんだと思う。包除原理を疑ったらまずベン図を描いてみると改善するかな……。

No.1554 array_and_me

 自力AC。作者さんが、ABCで似た問題が出たとツイートしていたのを見て挑戦、無事ACした。あまり似ている気はしなかったけれど……。

 heapqに入れて貪欲という解法はすぐに見えたのに、heapqに詰めるものを間違えて実装に時間がかかったのは反省。



 

2025年1月18日土曜日

yukicoder contest 455

 Bまで。A,Bは制約の違う同じ問題なので、実質一完でした。


No.3004 ヤング図形

 自力AC。

 二項係数と階乗の数の積で表すところまでは問題ない。問題は、制約が大きいため、それを愚直に計算しては間に合わないところ。階乗たち(F[i]とする)を陽に持っては間に合わないため、どのようなF[i]を何個かければ良いか、または何個割れば良いか? を持てば良い、というところまでは分かったが、これでもTLEだった。

 コンテスト後、冷静になれば、どのような入力でTLEするかに気付ける。

1
2 5

 を、Combi(10,8)*Combi(8,6)*Combi(6,4)*Combi(4,2)*Combi(2,0)を計算し、5!で割る、と計算しようとしていたが、これだとm(この入力だと5)が大きいとき間に合わない。

 この積が実は、10!を2=で5回割ったものだ、と気付きAC。

 うーん、コンテスト中にACできなくてはいけない問題でした。

No.3005 トレミーの問題

 トレミーの定理(覚えていなかった)の逆を使ってAC。

 解説を見ると、整数だけで解く方法があるらしくびっくり。

No.3006 ベイカーの問題

 自力ACだけど、タグに「行列」とあったのを見てしまったから自力とは言えないね……。

 行列累乗だと気付ければ解ける。漸化式を考えるのだから行列を考えるのは自然ですね。

2025年1月14日火曜日

AtCoder Regular Contest 190 (Div. 1)

 A一完。

コンテスト後のツイート

A - Inside or Outside

 ACしましたが、after contestでWAが出ました。

 ソートの仕方がまずくて、[a,b],[a,c]と、左端が同じものがあるとき、包含関係の判定がおかしかったのが原因でした。
 本番中にWAが出ていたら気付くのに非常に苦労した気がする……。運が良かった。
 

B - L Partition

 解説AC。解説放送も見ました。

 コンテスト中に考えていた再帰では間に合わなそう、ということで、何か方針転換しなくてはいけなかったのだけど、そういうとき、二項係数を考えるのは定石の一つ。考えなくてはいけない方針でした。ただ、解法ツイートなどを見てそう言われても全然思い浮かばなかったので、解くのは厳しかったかもしれない。

 また、二項係数の和を順に求めていくところも、(多分やったことはあると思うのだけど)記憶にありませんでした。

C - Basic Grid Problem with Updates 

 解説放送を見てAC。

 コンテスト中、スタートとゴールからDPして、差分計算をどうにかすれば良い……というところまでは考えていた。

 あとは、それらを用いて答えがどう表せるかが分かれば良かった。ただ、各クエリごとにmin(H, W)使って良いということにも気付いていなかったので、正解に近かったという感じではないが。

 ただ、Bよりは惜しかった気がするので、こっちに集中すべきだったかもしれない。

D - Matrix Pow Sum

 解説AC。解説放送も見ました。

 難問に思えた。実験すればある程度分かるという意見も見たけど、あまり思いつきそうにないなぁ……。

 ただ、解説放送で言及していたように、行列をグラフの経路数と見て行列の累乗をn歩進むときの行き方と捉える(たとえば、ここが参考になる)という考え方は身に着けておきたい。
 特に、「隣接行列をn乗してできる行列の各要素は、その行番号から列番号への頂点までを、そのグラフの辺をちょうどn回使うルートの総数」である。

2025年1月12日日曜日

HHKBプログラミングコンテスト2025(AtCoder Beginner Contest 388)

 Eまで五完。

コンテスト後のツイート

F - Dangerous Sugoroku

 コンテスト中の方針でACしたが、実装に非常に苦労した。というか、自力じゃデバッグできず、ACしているコードとランダムテストで比較した……。

 区間で管理する方針が良くなかったのだろう。
 どこへいけるかをlistで持った方が実装しやすかったようだ。

G - Simultaneous Kagamimochi 2

 Eの正しい解法を理解し、セグ木を使うと知れば後は難しくなかった(添え字で少し苦労したけど)。

 この問題がどうこうというより、Eで間違った考察をしていたのが敗因。


2025年1月9日木曜日

Hello 2025

 Cまで三完。

コンテスト後のツイート

D. Gifts Order

 けんちょんさんの記事を参考にAC。

 セグ木を使うのは第一候補だったのにこれを思いつかなかったのは良くない。可換性が成り立たないとセグ木が使えそうという判断が鈍ってしまうようだ。気を付けよう。

E2. Another Exercise on Graphs (hard version)

 こたつがめさんの放送の振り返りを見てAC。

 ワーシャルフロイド法で、一辺を変更するときは辺の二乗の計算量でできることは覚えておきたい。
 妙に制約が厳しい気がするけど、クエリ問題だから仕方ないのかな。(と思ったら、公式解説の方法はもっと速いらしい)

G. Secret Message

 証明は難しいが、「十字のマスのうち一マスを塗れば良さそう」というところから発想することは可能だったか。
 ただ、制約が厳しく、二次元配列を一次元に直さないと通らなかったので、コンテスト中にACするのは厳しかったかもしれない。

2025年1月8日水曜日

AtCoder Beginner Contest 387(Promotion of AtCoderJobs)

 Cを飛ばしてFまで五完。

コンテスト後のツイート


C - Snake Numbers

 桁DP(もしくは、それに近い)方法でやっていた人が多そうだったけど、コンテスト中に考えた場合分けの方針のままでAC。
 ただし、場合分けに苦戦し、かなりの時間がかかった。解けることは分かったけれど、桁DPで書いた方が混乱は少なそうです。