ラベル 形式的ベキ級数 の投稿を表示しています。 すべての投稿を表示
ラベル 形式的ベキ級数 の投稿を表示しています。 すべての投稿を表示

2026年5月9日土曜日

yukicoder 499 contest

 Fを考えていたが分からず、Dのみ一完。


No.3537 Thank You!

 解説AC。

 どのカードを1にするか決めたら貪欲で良い……というのはコンテスト中から分かっていたが、それは簡単に求められないと思って迷走してしまった。(安い方からあるところまで貪欲に買った後、それ以降で個数が一番多いものを1にする、とすれば良いと思ったが嘘でした)

 二分探索を使えば、実装はやや難しいが普通に計算できた。これは気付かなくてはいけなかった。

No.3538 Not First Place

 解説AC。
 形式的ベキ級数を用いて立式するところまではできたが、その後の式変形ができなかった。形式的ベキ級数の練習が足りない。

2023年9月26日火曜日

サントリープログラミングコンテスト2023(AtCoder Beginner Contest 321)

 Fまで六完だが遅かったりペナが多かったりで黄色に戻れず。Fは形式的ベキ級数を考えたのは良いのだけど、「注文の多い高橋商店」と同じ問題かと思ったらもっと簡単なDP(形式的ベキ級数で言うなら、簡単な式の掛け算、割り算)だったんですよね。もっと落ち着いてDPの式を考えないと。

コンテスト後のツイート

G - Electric Circuit

 解説放送を見てAC。$3^N$のbit DPだとは思ったが、正しい解法にたどりつけなかった。

 集合iに対して、DP[i]=iが連結成分になる場合の数と定義したとき、DP[i]を求めるところで何を引けばいいか分かっていなかった。

 まず、内部でいくつかの連結成分に分かれているかどうかは考慮せずにDPの値を求めておく。そこから$3^N$のbit DPを使って値を引いていく。

 $i=j\cup k$と表せるとき、DP[j]*DP[k](ではないが、そのようなもの)を引くわけだが、全ての部分集合に対してこれを引くと二重に引かれる部分が出てしまう。iに属するある頂点xを定め、xを含むようなjに対して、DP[j]*DP[i/j]……ではなく、DP[j]*(i/jが一つの連結成分になっていなくても良いが、その外との辺はないような場合の数)を引いていかなくてはいけない。

 (i/jが一つの連結成分になっていなくても良いが、その外との辺はないような場合の数)は、「引く前のDPの値」なので、既に求まっている。

 解法の大枠は分かっても、詰めるのは大変な問題でした。

 ただ、「同じものをダブルカウントしないため、「ある頂点を含むものだけ考える」などしなくてはいけない。」とは、この記事にも書いている。同じところで分からなくなったのは良くない。

2022年3月10日木曜日

AtCoder Beginner Contest 241(Sponsored by Panasonic)

 Fまで六完。

コンテスト後のツイート

G - Round Robin

 解説AC。
 フローで判定する問題。
 問題文を読んでフローらしさを感じるのは難しいけれど、「iさんがx勝で他の人たちがx勝未満、という状況は可能か?と捉えると、フローを使いたい気持ちにもなるか。

Ex - Card Deck Score

 解説放送を見て、さらに解説も参考にAC。

 形式的ベキ級数には慣れないが、この問題は形式的ベキ級数を用いて立式しようという気持ちになり、立式はできた。
 問題はその後の式変形。部分分数分解を用いた後、さらに
$\frac{1}{1-x}=1+x+x^2+x^3+\dots$
 を用いて変形するところはテクニカルに見えるが、慣れればできるのかなぁ。

 なお、解説放送でBostan–Mori のアルゴリズムの解説もしてくれたのはありがたかった。これで典型90埋まるかも?