YU2TA7KA's BLOG ~take one step at a time~

派生開発、組み込み開発周りのこと。

AtCoder Beginner Contest 164 ふりかえり

atcoder.jp
AtCoder Beginner Contest 164に参加しました。C問題までは解けて、D問題は一時間以上かけてもわからずゲームオーバー。それでもC問題までをWAなくそれなりの速度で解けたため、パフォーマンスが自己ベスト更新しました。
f:id:yuji-tanaak:20200429063315p:plain

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] - はまやんはまやんはまやん
ABC164-D Multiple of 2019 (400) - ひらめの日常

おわりに

D問題は手も足も出ませんでしたが、結果のパフォーマンスは良かったので、まあ良かったかなと思っています。今週末(2020/5/2,3)は2日間連続でコンテストがあるので楽しみです。あわよくばここで茶色にまでもっていきたいです。
ゴールデンウィークは蟻本を進めたいと思います。