ラベル 超頂点 の投稿を表示しています。 すべての投稿を表示
ラベル 超頂点 の投稿を表示しています。 すべての投稿を表示

2022年11月12日土曜日

大和証券プログラミングコンテスト2022 Autumn (AtCoder Beginner Contest 277)

 Eまで五完。

コンテスト後のツイート

F - Sorting a Matrix

 解説AC。

 行については、最小値・最大値を見てソートするのはOK。
 その後、列について考えるとき、ある行の二つの列で大小関係があるときに辺を張り、ループしたらダメ、としたい。が、辺の本数が多くなりそうで困っていた。

 こういうとき使うのが、超頂点を加える手法ですね。
 ただ、最近、この問題で使った方法とは超頂点の使い方が違うのが難しい。「同じ数字たちをまとめるために超頂点を使う」という手法はなじみがなかった。
 (とはいえ、超頂点を使うこと自体を考えなかったのはダメ)

 なお、答が一致した後もTLEを取るために苦戦した。

G - Random Walk to Millionaire

 解説放送を見てAC。

 Xの二乗とは何か? と考えたとき、「どこでレベルアップしたか?」の組み合わせと考えてDPへ持ち込む。
 考え方は分かるのだけど、この問題でこの手法を使うとは。

 ただ、この問題ではDPくらいしかやりようがないし、DPを高速化しようと思ったらXの二乗というところを上手く使うしかない。そう思えば、この変形をするしかない、と考えるのは自然だとは思う。

 しかし、元々積で与えられているものを分けて考えるというのはピンと来なくて。難しい。

2022年9月25日日曜日

トヨタ自動車プログラミングコンテスト2022(AtCoder Beginner Contest 270)

 Eまで五完。

コンテスト後のツイート

F - Transportation

 解説AC。

 最小全域木を作る問題なので、クラスカル法かをプリム法を使うしかない。(一応、他にブルーフカ法というのもあるが、あまり使わない)
 空港・港とあるが、それぞれを使う・使わないで四種類ありそう。

 コンテスト中、ここまで考えて、止まってしまった。

 あとは、「超頂点を作って空港や港を処理する」というのを思いつかなくてはいけない。見たことないなら仕方ないが、何問も類題を解いているのに思いつかないのはまずい。
 ただ、超頂点を作る、という手法を思いつかずに問題を落としていることは結構多い気がする。自分の苦手な方法なのかもしれないので、気を付けよう。

 なお、PyPyだと制限時間がきつい。毎回グラフを構築していると間に合わないため苦労した。

G - Sequence in mod P

 解説放送を見てAC。

 B=0ならBaby-Step Giant-Step法が使えるので、それを応用できないか、と考えると大体そのまま解ける。Baby-Step Giant-Step法をよく覚えていなかったのは問題だけど、まあ平方分割ですね。
 ACするためには、A=1やA=0の場合をケアしないといけない。