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の部分集合の個数しかない。これを利用すれば解ける。