atcoder.jp
AtCoder Beginner Contest 164に参加しました。C問題までは解けて、D問題は一時間以上かけてもわからずゲームオーバー。それでもC問題までをWAなくそれなりの速度で解けたため、パフォーマンスが自己ベスト更新しました。
A問題
狼と羊の数を比較する。同値の場合はunsafe。
B問題
お互いの体力を攻撃力で交互に引いていく。0以下になったら解答出力してループ終了。
C問題
std::collections::HashMapを使うことで簡単に実装完了。ここまでで10分。
ハッシュマップ - The Rust Programming Language
use std::collections::HashMap; use std::io::*; use std::str::FromStr; //https://qiita.com/tubo28/items/e6076e9040da57368845 fn read<T: FromStr>() -> T { let stdin = stdin(); let stdin = stdin.lock(); let token: String = stdin .bytes() .map(|c| c.expect("failed to read char") as char) .skip_while(|c| c.is_whitespace()) .take_while(|c| !c.is_whitespace()) .collect(); token.parse().ok().expect("failed to parse token") } fn main() { let n:usize = read(); let s: Vec<String> = (0..n).map(|_| read()).collect(); let mut map = HashMap::new(); for i in s.iter() { let count = map.entry(i).or_insert(0); *count += 1; } println!("{}", map.len()); }
D問題
TLEする2重ループの実装はできた。が、ACできる実装には至らず終了。
コンテスト後に解答や他のユーザさんのブログを見たのですが、それでも理解できず。余りの値をDPで計算していくようなのですが、そこが理解できていない感じです。2時間くらい唸っても駄目だったので、一度撤退しますorz 相応のレーティングになったら再チャレンジします。AtCoder Problemsで確認するとDifficulty1204だったので、ちょい先かなと。。
Multiple of 2019 [AtCoder Beginner Contest 164 D] - はまやんはまやんはまやん
AtCoder: ABC164-D Multiple of 2019 (400) - ひらめの日常
おわりに
D問題は手も足も出ませんでしたが、結果のパフォーマンスは良かったので、まあ良かったかなと思っています。今週末(2020/5/2,3)は2日間連続でコンテストがあるので楽しみです。あわよくばここで茶色にまでもっていきたいです。
ゴールデンウィークは蟻本を進めたいと思います。