2023-04-01から1ヶ月間の記事一覧

アルゴリズムと数学 048

https://atcoder.jp/contests/math-and-algorithm/tasks/arc084_b最初に、2と5の素因数があれば5と2を掛ければ10のべき乗になるので排除できます。例えば、12なら25を掛けて300なので、3を考えればよいです。 29を考えてみましょう。100000000000001が29で割…

AtCoder Beginner Contest 299 E

https://atcoder.jp/contests/abc299/tasks/abc299_e最初に全部黒にして、dより内側は全て白くします。そこで、dのところが全て白でないかを調べます。簡単そうですが、トラップがあります。 // Nearest Black Vertex #![allow(non_snake_case)] use std::co…

AtCoder Beginner Contest 299 D

https://atcoder.jp/contests/abc299/tasks/abc299_d最初が0で最後が1と決まっているのがポイントですね。あとは二分探索で。 // Find by Query #![allow(non_snake_case)] use std::cmp::min; //////////////////// library //////////////////// fn read<T: std::str::FromStr>()</t:>…

アルゴリズムと数学 047

https://atcoder.jp/contests/math-and-algorithm/tasks/math_and_algorithm_aoグラフをたどるだけですね。 // Bipartite Graph #![allow(non_snake_case)] use std::collections::HashSet; //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -></t:>…

アルゴリズムと数学 046

https://atcoder.jp/contests/math-and-algorithm/tasks/abc007_3PointをGenericを使って書くととたんに難しくなりますね。 幅優先探索のQueueは、VecDequeを使います。 // 幅優先探索 #![allow(non_snake_case)] use std::ops::{Add, Sub}; use std::collec…

AtCoder Beginner Contest 298 E

https://atcoder.jp/contests/abc298/tasks/abc298_e単なるDPですが、Dを法とした逆数を求めなければなりません。拡張ユークリッド互除法ですね。一度書けば終わりですが。 // Unfair Sugoroku #![allow(non_snake_case)] use std::cmp::min; //////////////…

AtCoder Beginner Contest 298 D

https://atcoder.jp/contests/abc298/tasks/abc298_d剰余を用意して、1なら10倍して足して、2なら数字×10のべき乗を引けばいいのですが、Rustには負数の剰余を取ると負になるというトラップがありますね。 // Writing a Numeral #![allow(non_snake_case)] /…

アルゴリズムと数学 045

https://atcoder.jp/contests/math-and-algorithm/tasks/typical90_bzそのままですね。 RustのIteratorにはcountがあるのがいいですね。 // Easy Graph Problem #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> </t:>…

アルゴリズムと数学 044

https://atcoder.jp/contests/math-and-algorithm/tasks/math_and_algorithm_an各辺の距離を1として、ダイクストラ法を使えばよいです。 PriorityQueueは、BinaryHeapで実装できます。 // Shortest Path 1 #![allow(non_snake_case)] use std::collections::…

アルゴリズムと数学 043

https://atcoder.jp/contests/math-and-algorithm/tasks/math_and_algorithm_am連結成分に分けるコードとだいたい同じです。 グラフの隣接ノードを追加するのに、get_mutを使うと便利ですね。 // Depth First Search #![allow(non_snake_case)] use std::col…

AtCoder Beginner Contest 297 E

https://atcoder.jp/contests/abc297/tasks/abc297_eBTreeSetを使えば簡単ですね。 // Kth Takoyaki Set #![allow(non_snake_case)] use std::collections::BTreeSet; //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = S</t:>…

AtCoder Beginner Contest 297 D

https://atcoder.jp/contests/abc297/tasks/abc297_dGCDを求めるのと同じですね。 // Count Subtractions #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().</t:>…

AtCoder Beginner Contest 296 D

https://atcoder.jp/contests/abc296/tasks/abc296_d単に割り切れる数を探しているだけですが、トラップがあります。 // M<=ab #![allow(non_snake_case)] use std::cmp::max; //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut </t:>…