2022-01-01から1年間の記事一覧

AtCoder Beginner Contest 264 C

https://atcoder.jp/contests/abc264/tasks/abc264_cどうしてもインデックスベースになりますね。 // Matrix Reducing #![allow(non_snake_case)] use itertools::Itertools; type Matrix<T> = Vec<Vec<T>>; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::</t:></vec<t></t>…

AtCoder Beginner Contest 265 C

https://atcoder.jp/contests/abc265/tasks/abc265_cこういう問題はOptionを使うとよいようです。1行が少し長くなりますが。 あと、Rustにはloopというキーワードがあるんですね。 // Belt Conveyor #![allow(non_snake_case)] use std::collections::HashSe…

AtCoder Beginner Contest 266 C

https://atcoder.jp/contests/abc266/tasks/abc266_c各点が凸であることを調べるだけですね。 // Convex Quadrilateral #![allow(non_snake_case)] use std::ops::Sub; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut lin</t:>…

AtCoder Beginner Contest 267 C

https://atcoder.jp/contests/abc267/tasks/abc267_cどうしてもusizeとi64の変換が必要な問題なのでめんどうですね。 // Index × A(Continuous ver.) #![allow(non_snake_case)] use std::cmp::max; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io</t:>…

AtCoder Beginner Contest 268 C

https://atcoder.jp/contests/abc268/tasks/abc268_b剰余の頻度を集計していますが、めんどうですね。 // Chinese Restaurant #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok(); line</t:>…

AtCoder Beginner Contest 269 C

https://atcoder.jp/contests/abc269/tasks/abc269_cABCのC問題を解いていきます。Pythonだとgeneratorを使ってこんな感じで書けますが、 def gen_submask(N, L): if L == 1: yield 0 if N == 1: yield 1 else: L1 = L / 2 L2 = L - L1 ns1 = list(gen_subma…

AtCoder Beginner Contest 268 B

https://atcoder.jp/contests/abc268/tasks/abc268_b部分文字列はこんな感じで取れるようです。 let sub = &T[..S.len()]; // Prefix? #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok</t:>…

AtCoder Beginner Contest 236 B

https://atcoder.jp/contests/abc236/tasks/abc236_benumerateは、本当はindexと値の参照のタプルを返します。 // Who is missing? #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok();</t:>…

AtCoder Beginner Contest 237 B

https://atcoder.jp/contests/abc237/tasks/abc237_btypeを使うと型のaliasを作ることができます。 type Matrix<T> = Vec<Vec<T>>; std::str::FromStrの逆のTraitはstd::string::ToStringなんですね。 // Matrix Transposition #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -></t:></vec<t></t>…

AtCoder Beginner Contest 238 B

https://atcoder.jp/contests/abc238/tasks/abc238_bソートして差を取るだけですが、最後に360を付ける必要がありますね。 // Pizza #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok()</t:>…

AtCoder Beginner Contest 239 B

https://atcoder.jp/contests/abc239/tasks/abc239_b余りと同じで商もPythonならそのままなのですが。 // Integer Division #![allow(non_snake_case)] use std::collections::HashSet; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().re</t:>…

AtCoder Beginner Contest 240 B

https://atcoder.jp/contests/abc240/tasks/abc240_bTraitの指定にwhereを使うとちょっときれいに書けます。 // Count Distinct Integers #![allow(non_snake_case)] use std::collections::HashSet; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::i</t:>…

AtCoder Beginner Contest 241 B

https://atcoder.jp/contests/abc241/tasks/abc241_bHashMapの値を変えるには、get_mutとメソッドを使うんですね。 // Pasta #![allow(non_snake_case)] use std::collections::HashMap; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().r</t:>…

AtCoder Beginner Contest 242 B

https://atcoder.jp/contests/abc242/tasks/abc242_bソートするだけですね。 // Minimize Ordering #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok(); line.trim().parse().ok().unwr</t:>…

AtCoder Beginner Contest 243 B

https://atcoder.jp/contests/abc243/tasks/abc243_bHashSet同士のintersectはHashSetなんですね。 // Hit and Blow #![allow(non_snake_case)] use std::collections::HashSet; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line</t:>…

AtCoder Beginner Contest 244 B

https://atcoder.jp/contests/abc244/tasks/abc244_b位置と方向をセットにすると簡単です。 // Go Straight and Turn Right #![allow(non_snake_case)] use std::ops::Add; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut</t:>…

AtCoder Beginner Contest 266 B

https://atcoder.jp/contests/abc266/tasks/abc266_bPythonなら剰余そのままですが、RustはC++との互換性のためか被除数が負だと負になってしまうんですねえ。 // Modulo Number #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); </t:>…

AtCoder Beginner Contest 267 B

https://atcoder.jp/contests/abc267/tasks/abc267_b効率が悪いですが、順番を追ってやれば問題ないですね。 // Split? #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok(); line.trim(</t:>…

AtCoder Beginner Contest 245 B

https://atcoder.jp/contests/abc245/tasks/abc245_bread_setを書いてみましたが、たくさんTraitが要りますね。 // Mex #![allow(non_snake_case)] use std::collections::HashSet; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_l</t:>…

AtCoder Beginner Contest 246 B

https://atcoder.jp/contests/abc246/tasks/abc246_b最初からf64にすれば楽ですね。 // Get Closer #![allow(non_snake_case)] use itertools::Itertools; use std::collections::HashSet; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin()</t:>…

AtCoder Beginner Contest 247 B(2)

https://atcoder.jp/contests/abc247/tasks/abc247_b match m.get(&k.to_string()) { Some(n) => { let n1 = n + 1; m.insert(k.to_string(), n1) } None => m.insert(k.to_string(), 1) }; は、entryを使ってこう書けるんですね。 let e = m.entry(k.to_str…

AtCoder Beginner Contest 247 B

https://atcoder.jp/contests/abc247/tasks/abc247_bStringをHashMapのキーにするときには、to_string()をつけるとよいようです。 それから、 match m.get(&k.to_string()) { Some(n) => m.insert(k.to_string(), n + 1), None => m.insert(k.to_string(), 1…

AtCoder Beginner Contest 248 B

https://atcoder.jp/contests/abc248/tasks/abc248_b0からの無限列を出すときは、 0.. こうですね。 以下はpow関数を使っているのでやや効率が悪いですが。 // Slimes #![allow(non_snake_case)] use num_traits::pow; fn read<T: std::str::FromStr>() -> T { let mut line = Stri</t:>…

AtCoder Beginner Contest 249 B

https://atcoder.jp/contests/abc249/tasks/abc249_b大文字小文字判定は、is_uppercase/is_lowercaseです。 // Perfect String #![allow(non_snake_case)] use std::collections::HashSet; fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin()</t:>…

AtCoder Beginner Contest 250 B

https://atcoder.jp/contests/abc250/tasks/abc250_bあえてcharのMatrixみたいなのを作ってそれを表示します。 Matrixを作るには、Iterator::collectを二重に適用すればよいですね。 ただ、そうすると複雑な形になって読みにくいので、closureを使っています…

AtCoder Beginner Contest 251 B

https://atcoder.jp/contests/abc251/tasks/abc251_b use itertools::Itertools; として手元でコンパイルすると、 error[E0432]: unresolved import `itertools` --> ABC251B.rs:4:5 | 4 | use itertools::Itertools; | ^^^^^^^^^ maybe a missing crate `it…

AtCoder Beginner Contest 252 B

https://atcoder.jp/contests/abc252/tasks/abc252_bデバッグでHashSetをVecに変換しましたが、from_iterを使うと簡単です。 use std::iter::FromIterator; let w = Vec::from_iter(max_index_set.iter()); // Takahashi's Failure #![allow(non_snake_case)…

AtCoder Beginner Contest 253 B

https://atcoder.jp/contests/abc253/tasks/abc253_benumerateはこのようにするんですね。 for (i, s) in S.iter().enumerate() { ... } // Distance Between Tokens #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>(</t:>…

AtCoder Beginner Contest 254 B

https://atcoder.jp/contests/abc254/tasks/abc254_b let mut b = Vec::with_capacity(a.len() + 1); b.set_len(a.len() + 1); でVecのサイズを変えられそうですが、 error[E0133]: call to unsafe function is unsafe and requires unsafe function or bloc…

AtCoder Beginner Contest 255 B

https://atcoder.jp/contests/abc255/tasks/abc255_bf64でmax/minを取ろうとすると、 points.iter().map(|&point| pt.dist(&point)).min().unwrap() このように怒られます。 error[E0277]: the trait bound `f64: Ord` is not satisfied --> ABC255B2.rs:53:…