2025-11-01から1ヶ月間の記事一覧

AtCoder Beginner Contest 433 F

https://atcoder.jp/contests/abc433/tasks/abc433_f簡単な例から考えましょう。例えば、1111222とします。 1文字だけ取るとすると、4つある1から1つ、3つある2から1つ取るときの場合の数は、2つずつ取るときの場合の数は、3つ取るときはです。乗数のCの右側…

AtCoder Beginner Contest 433 E

https://atcoder.jp/contests/abc433/tasks/abc433_e小さい値から行列の要素を埋めていけばよいです。行と列の片方にその値があればどちらかを適当に埋めていけばいいのですが、両方にある場合は交わった要素をその値にしなければなりません。 また、それ以…

AtCoder Beginner Contest 433 D

https://atcoder.jp/contests/abc433/tasks/abc433_d2つ目の引数の桁数は1~10なので、Aiを10倍から1010倍してMで割った余りをカウントしておけばよいです。 // Suddenly, A Tempest #![allow(non_snake_case)] use std::collections::HashMap; ////////////…

AtCoder Beginner Contest 432 E

https://atcoder.jp/contests/abc432/tasks/abc432_e和の中の式は、なら常に、なら3つの範囲に分けて、なら、なら、ならとなります。 値とそれがいくつあるかを木にすればよいです。 // Clamp #![allow(non_snake_case)] //////////////////// library /////…

AtCoder Beginner Contest 432 D

https://atcoder.jp/contests/abc432/tasks/abc432_d14回なので最大でも16384個の長方形しかできないので、それらが繋がっているかどうかを調べます。 // Suddenly, A Tempest #![allow(non_snake_case)] use std::collections::HashMap; //////////////////…

AtCoder Beginner Contest 422 G

https://atcoder.jp/contests/abc422/tasks/abc422_g1は簡単です。箱1のボールの個数がAの倍数の母関数は、 なので、3つの箱全体での母関数は、 分母は精々8項なので、O(N)でxNの項まで計算できます。2は1のようにはいきません。ボールを区別するので指数型…

AtCoder Beginner Contest 431 F

https://atcoder.jp/contests/abc431/tasks/abc431_f例えば、Dが1でAをソートした列が1 2 3 4だとすると、1と2の有効列は 1 2 2 1の2つが考えられますが、これに3を追加するとすると、どちらでも2の左か最後に追加するしかないので、どちらの場合も2通り追加…

AtCoder Beginner Contest 431 E

https://atcoder.jp/contests/abc431/tasks/abc431_eBinaryHeapを使って、何回鏡を変えたかの小さいほうから処理して、ゴールにたどり着いたときの操作回数を得ます。 // Reflection on Grid #![allow(non_snake_case)] //////////////////// library //////…

AtCoder Beginner Contest 431 D

https://atcoder.jp/contests/abc431/tasks/abc431_dBodyのWeightを状態、トータルの嬉しさを値にしてDPすればよいです。最大でもですが、余裕で間に合っています。 // Robot Customize #![allow(non_snake_case)] //////////////////// library ///////////…

AtCoder Beginner Contest 430 F

https://atcoder.jp/contests/abc430/tasks/abc430_f入力例の最初のケースだと、 1 2 4 3 2 4 5という位置関係なので、1は右端には行けません。2は左に3個はあるので、4番目以降になります。 なので、木を作って指定した範囲に1を足せるようにするとよいです…

AtCoder Beginner Contest 430 E

https://atcoder.jp/contests/abc430/tasks/abc430_e1個ずらしでタイリングするとよいです。すなわち、 元の文字列 ----------------------------- ----- ----- ----- ... -----みたいに切り出します。ただし、今回は右端まで行ったら、左に戻ってくるように…

AtCoder Beginner Contest 430 D

https://atcoder.jp/contests/abc430/tasks/abc430_dBTreeSetを使って、前後の要素を拾ってこればよいです。 // Neighbor Distance #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::</t:>…

AtCoder Beginner Contest 429 F

https://atcoder.jp/contests/abc429/tasks/abc429_f横方向に領域を分割していきます。最後まで分割したら、隣の領域同士を結合して木を作ります。各ノードは左端の各行から右端の各行までの最短距離(+1)を記録しておけばよいので、簡単に結合できます。ルー…