結果
問題 | No.7 プライムナンバーゲーム |
ユーザー |
|
提出日時 | 2024-07-30 11:10:51 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 49 ms / 5,000 ms |
コード長 | 1,451 bytes |
コンパイル時間 | 14,078 ms |
コンパイル使用メモリ | 401,400 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-30 11:11:08 |
合計ジャッジ時間 | 15,726 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 17 |
コンパイルメッセージ
warning: unused import: `proconio::marker::Chars` --> src/main.rs:3:5 | 3 | use proconio::marker::Chars; | ^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default warning: function `proc` is never used --> src/main.rs:20:4 | 20 | fn proc(n: u64) -> u64 { | ^^^^ | = note: `#[warn(dead_code)]` on by default
ソースコード
use std::collections::HashMap; use proconio::marker::Chars; fn main() { proconio::input! { n: u64, } let mut memo = HashMap::new(); for n in 2..=10000 { winlose(n, &mut memo); } if winlose(n, &mut memo) { println!("Win"); } else { println!("Lose"); } } fn proc(n: u64) -> u64 { (n / 3 + n / 5) * 2 } const PRIME_NUM: [u64; 1229] = { let mut tbl = [0; 1229]; let mut i = 0; let mut p = 0; while p < PRIME.len() as u64 { if PRIME[p as usize] { tbl[i] = p; i += 1; } p += 1; } tbl }; const PRIME: [bool; 10001] = create_prime(); const fn create_prime<const N: usize>() -> [bool; N] { let mut table = [true; N]; table[0] = false; table[1] = false; let mut i = 2; while i < N { if table[i] { let mut j = i * 2; while j < N { table[j] = false; j += i; } } i += 1; } table } fn winlose(n: u64, memo: &mut HashMap<u64, bool>) -> bool { if n < 2 { return true; } if let Some(&memo) = memo.get(&n) { return memo; } let result = PRIME_NUM .iter() .copied() .take_while(|&x| x < n) .any(|x| !winlose(n - x, memo)); memo.insert(n, result); result } #[cfg(test)] mod test { use super::*; #[test] fn test() {} }