2022-07-01から1ヶ月間の記事一覧

AtCoder Beginner Contest 258 B

https://atcoder.jp/contests/abc258/tasks/abc258_b違う型を掛けるにはこうします。 impl Mul<i32> for Point { type Output = Self; fn mul(self, c: i32) -> Self { Self { x: self.x * c, y: self.y * c } } } いちばん大きい数字のマスから辿っていますが、</i32>…

AtCoder Beginner Contest 259 B

https://atcoder.jp/contests/abc259/tasks/abc259_bsin/cosは let x = a * rad.cos() - b * rad.sin(); let y = a * rad.sin() + b * rad.cos(); こうなんですねえ。 // Counterclockwise Rotation #![allow(non_snake_case)] use std::f64::consts::PI; fn…

AtCoder Beginner Contest 260 B

https://atcoder.jp/contests/abc260/tasks/abc260_b let mut s = BTreeSet::<usize>::new(); set_from_vec(&s, &ids1, X); これだと怒られます。 40 | set_from_vec(&s, &ids1, X); | ^^ types differ in mutabilityこれは、 set_from_vec(&mut s, &ids1, X); とし</usize>…

AtCoder Beginner Contest 261 B

https://atcoder.jp/contests/abc261/tasks/abc261_bABCのB問題を解いていきます。非対角部分の座標を列挙するIteratorを書けばきれいになりますが、なかなか大変ですね。Pythonなら簡単ですが。 // Tournament Result #![allow(non_snake_case)] fn read<T: std::str::FromStr>() </t:>…

AtCoder Beginner Contest 239 A

https://atcoder.jp/contests/abc239/tasks/abc239_a平方根を取るには let d = (H * (12800000.0 + H)).sqrt(); とすればよいですが、f64のメソッドなのが気に入らないので関数を自作しましょう。 fn sqrt(x: f64) -> f64 { fn f(x: f64, y: f64) -> f64 { l…

AtCoder Beginner Contest 241 A

https://atcoder.jp/contests/abc241/tasks/abc241_ak -> a[k]という関数を3回適応すればいいので、foldを使えばよいでしょう。 // Digit Machine #![allow(non_snake_case)] fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&m</t:>…

AtCoder Beginner Contest 243 A

https://atcoder.jp/contests/abc243/tasks/abc243_aPythonではこのようにcycleを使うと分かりやすいですが、 for S, ret in izip(cycle((A, B, C)), cycle('FMT')): ... Rustでも同様の方法が使えます。 let v = vec![f, m, t]; for p in v.iter().cycle() …

AtCoder Beginner Contest 245 A

https://atcoder.jp/contests/abc245/tasks/abc245_aPerson構造体を定義して、比較ができるようにします。 fn main() { let v = read_vec(); let t = Person { H: v[0], M: v[1], S: 0 }; let a = Person { H: v[2], M: v[3], S: 1 }; if t < a { println!("…

AtCoder Beginner Contest 246 A(2)

https://atcoder.jp/contests/abc246/tasks/abc246_aselectにVecではなく、できればiteratorを渡したいですよね。 オブジェクト指向が抜けないと fn select(v: Iterator<i32>) -> Option<i32> { みたいに書きそうですが、std::iter::Iteratorはtraitなので、Genericsを</i32></i32>…

AtCoder Beginner Contest 246 A(1)

https://atcoder.jp/contests/abc246/tasks/abc246_a各座標をカウントして、1個しかない方が欠けた座標です。 Pythonで辞書を作ります。 x_counter = Counter(x for x, y in points) rustで辞書はHashMapやBTreeMapです。 let v: Vec<i32> = points.iter().map(|p</i32>…

AtCoder Beginner Contest 247 A

https://atcoder.jp/contests/abc247/tasks/abc247_aまず、部分文字列を取ってきます。 &S[..S.len()-1]; これで最後の文字以外の文字列を取れたことになります。型は&strになります。 あとは"0"と結合すればよいですが、文字列の結合はString + &strなので…

AtCoder Beginner Contest 248 A(3)

https://atcoder.jp/contests/abc248/tasks/abc248_a素直にsetを使う方法も考えましょう。例によってPythonだと、 def F(S): s = set(int(c) for c in S) return next(d for d in range(10) if d not in s) これをRustにすると、 let set = S.chars().map(|c…

AtCoder Beginner Contest 248 A(2)

https://atcoder.jp/contests/abc248/tasks/abc248_a直感的にはsetを使いますよね。setの要素をbitで表すとPythonでは次のようになります。 def F(S): s = sum(1 << int(c) for c in S) return next(d for d in range(10) if ((1 << d) & s) == 0) これをRus…

AtCoder Beginner Contest 248 A(1)

https://atcoder.jp/contests/abc248/tasks/abc248_aまずは、ちょっとテクニカルで応用が利かないが実装が楽な方法を使ってみます。Pythonならこうです。 def F(S): s = sum(int(c) for c in S) return 45 - s これをRustにすると、 let s: i32 = S.chars().…

AtCoder Beginner Contest 259 A

https://atcoder.jp/contests/abc259/tasks/abc259_a年齢を入れたら身長が出る構造体の関数を作ります。 0歳のときの身長を構造体の要素にしたいので、静的関数で作るようにします。静的関数を書くには、selfを引数に書かないようにするだけのようです。 // …

AtCoder Beginner Contest 250 A

https://atcoder.jp/contests/abc250/tasks/abc250_a座標の問題なので、Pointという構造体を作ります。 struct Point { x: i32, y: i32, } 要素をカンマ区切りで並べるだけです。 メソッドは次のように書きます。 impl Point { fn add(&self, other: &Point)…

AtCoder Beginner Contest 251 A

https://atcoder.jp/contests/abc251/tasks/abc251_aPythonではこんな感じです。 def F(S): return S * (6 / len(S)) Rustでは掛け算みたいなのはないようで、ここでは単純に足し算のような書き方をします。nが大きければ分割統治法が必要ですが。 fn times(…

AtCoder Beginner Contest 253 A

https://atcoder.jp/contests/abc253/tasks/abc253_aPythonでこんな風に書いてみました。 def median(v): w = sorted(v) if len(w) % 2 == 1: return w[len(w)/2] else: return (w[len(w)/2-1] + w[len(w)/2]) * 0.5 def F(a, b, c): return YesNo(median((a…

AtCoder Beginner Contest 254 A

https://atcoder.jp/contests/abc254/tasks/abc254_aPythonでは、 def F(N): return "%02d" % (N % 100) ですが、フォーマット付きはどうしたらいいのでしょうか。 println!("{:02}", N % 100) dを付けたいところですが、10進がデフォルトなので付けないとい…

AtCoder Beginner Contest 255 A

https://atcoder.jp/contests/abc255/tasks/abc255_a #![allow(non_snake_case)] とすれば、AtCoderに必要な大文字を使っても警告が出なくなりますね。行列はVecのVecで表現します。 let mut M = Vec::<Vec::<i32>>::new(); Vecのインデックスをi32とすると、 error[E02</vec::<i32>…

AtCoder Beginner Contest 256 A

https://atcoder.jp/contests/abc256/tasks/abc256_aビットシフトを使えば簡単ですが、pow関数は使えないのでしょうか。 let N: i32 = read(); println!("{}", 2.pow(N)) error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`2だと…

AtCoder Beginner Contest 257 A

https://atcoder.jp/contests/abc257/tasks/abc257_aRustの学習のために、ABCのA問題を解いていきます。Python2ならこんな感じでしょうか def F(N, X): q = (X - 1) / N return chr(q + 65) Rustではchar関数の代わりに整数をcharにキャストします。ただし、…