結果

問題 No.8 N言っちゃダメゲーム
ユーザー iwotiwot
提出日時 2019-12-17 17:43:13
言語 Rust
(1.77.0)
結果
AC  
実行時間 10 ms / 5,000 ms
コード長 1,350 bytes
コンパイル時間 2,037 ms
コンパイル使用メモリ 164,232 KB
実行使用メモリ 4,380 KB
最終ジャッジ日時 2023-09-17 04:51:21
合計ジャッジ時間 2,700 ms
ジャッジサーバーID
(参考情報)
judge12 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,380 KB
testcase_01 AC 1 ms
4,380 KB
testcase_02 AC 1 ms
4,376 KB
testcase_03 AC 4 ms
4,380 KB
testcase_04 AC 10 ms
4,380 KB
testcase_05 AC 2 ms
4,380 KB
testcase_06 AC 1 ms
4,380 KB
testcase_07 AC 1 ms
4,376 KB
testcase_08 AC 1 ms
4,376 KB
testcase_09 AC 1 ms
4,376 KB
testcase_10 AC 1 ms
4,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

fn read<T: std::str::FromStr>() -> T {
  let mut s = String::new();
  std::io::stdin().read_line(&mut s).ok();
  s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim()
        .split_whitespace()
        .map(|e| e.parse().ok().unwrap())
        .collect()
}

fn main() {
  let p: usize = read();
  let nk_list = (0..p).map(|_| {
    let pair: Vec<u32> = read_vec();
    (pair[0], pair[1])
  }).collect();
  println!("{}", no8(p, nk_list));
}

fn no8(_p: usize, nk_list: Vec<(u32, u32)>) -> String {

  use std::collections::HashMap;

  fn judge(n:u32, k:u32, cache: &mut HashMap<(i64, i64), bool>) -> bool {
    let mut must = n as i64 - 1;
    let k = k as i64;
    if let Some(result) = cache.get(&(must, k)) {
      dbg!(&result);
      return *result;
    }
    loop {
      if must - k - 1 <= 0 {
        break;
      }
      must = must - k - 1;
      if let Some(result) = cache.get(&(must, k)) {
        dbg!(&result);
        return *result;
      }
    }
    let result = must <= k;
    cache.insert((must, k), result);
    result
  }

  let mut cache = HashMap::new();

  let result = nk_list.iter().map(move |nk| if judge(nk.0, nk.1, &mut cache) { "Win" } else { "Lose" }).collect::<Vec<&str>>();

  result.join("\n")
}
0