2026-05-01から1ヶ月間の記事一覧
https://atcoder.jp/contests/abc459/tasks/abc459_d各文字がいくつ使われているか調べて、一番多い文字を等間隔に置いて、その間に多い順に置いていけばよいです。 こういう問題はOptionを使うとよいですね。 // Chalkboard Median #![allow(non_snake_case…
https://atcoder.jp/contests/abc456/tasks/abc456_g久しぶりに解説を見てみたら、母関数を使う方法が書いてありました。 Sをxで分割して、それぞれの領域の長さをとして、日のうち連続する休日が日までの場合の数をとすると、求める場合の数は、となります…
https://atcoder.jp/contests/abc458/tasks/abc458_d半分に分けて、奇数個だから左側が一つ多くなるように保ちます。 // Chalkboard Median #![allow(non_snake_case)] use std::collections::BinaryHeap; //////////////////// library ///////////////////…
https://atcoder.jp/contests/abc457/tasks/abc457_d値の下限を決めて、そこに達するまで何回操作するかを調べます。そして、二分探索でその下限を決めます。ただし、細かいところがややこしいですね。 // Raise Minimum #![allow(non_snake_case)] ////////…
https://atcoder.jp/contests/abc454/tasks/abc454_c有向グラフを1から辿るだけですが、Rでグラフをふつうに作る全然時間が足りません。そこでノードの隣のノードの配列をリストにします。こうすると時間内に収まります。 v <- scan("stdin", integer()) N <…
https://atcoder.jp/contests/abc456/tasks/abc456_cDP的に、前の文字と隣に同じ文字無しに何文字続いているかを記憶していきます。 最後はやっぱり出力のところですね。 D <- 998244353 v <- scan("stdin", character()) S <- v[1] char_to_int <- function…
https://atcoder.jp/contests/abc456/tasks/abc456_f1日飛ばしでもいいという問題です。これが毎日コストをかけるということなら、ウィンドウ幅を一定にしてスライドしていけばいいのですが、1日飛ばしだとうまくいきません。コストを払うときと払わないとき…
https://atcoder.jp/contests/abc456/tasks/abc456_e都市と曜日の組み合わせをノードにして有向グラフにして、ループがあるかを判定します。 // Endless Holidays #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -</t:>…
https://atcoder.jp/contests/abc456/tasks/abc456_d最後の文字が何かを状態とするDPです。空文字もあるので4通りです。 // Not Adjacent 2 #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = </t:>…
https://atcoder.jp/contests/abc455/tasks/abc455_c各要素の頻度を調べて、要素と頻度を掛け合わせて、それをソートして、後ろからK除いた配列の和を取ればよいです。 頻度を調べるのはtableという関数で、要素はnamesで取ることができます。 最後、指数表…
https://atcoder.jp/contests/abc455/tasks/abc455_fコストは になります。スライムが合体するときにたとえばが出会うときにの項が発生するからです。 範囲に一律に足すから遅延評価セグメント木を使いたくなりますが、 なので、2乗和が必要なのでふつうのよ…