結果
問題 | No.7 プライムナンバーゲーム |
ユーザー | Yoshihito |
提出日時 | 2020-06-19 16:36:15 |
言語 | Rust (1.77.0 + proconio) |
結果 |
AC
|
実行時間 | 3 ms / 5,000 ms |
コード長 | 2,016 bytes |
コンパイル時間 | 11,895 ms |
コンパイル使用メモリ | 378,540 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-01 16:35:11 |
合計ジャッジ時間 | 11,656 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,248 KB |
testcase_02 | AC | 3 ms
5,248 KB |
testcase_03 | AC | 1 ms
5,248 KB |
testcase_04 | AC | 0 ms
5,248 KB |
testcase_05 | AC | 1 ms
5,248 KB |
testcase_06 | AC | 2 ms
5,248 KB |
testcase_07 | AC | 1 ms
5,248 KB |
testcase_08 | AC | 1 ms
5,248 KB |
testcase_09 | AC | 2 ms
5,248 KB |
testcase_10 | AC | 1 ms
5,248 KB |
testcase_11 | AC | 2 ms
5,248 KB |
testcase_12 | AC | 2 ms
5,248 KB |
testcase_13 | AC | 2 ms
5,248 KB |
testcase_14 | AC | 3 ms
5,248 KB |
testcase_15 | AC | 2 ms
5,248 KB |
testcase_16 | AC | 2 ms
5,248 KB |
ソースコード
use std::io::{self, Read}; #[derive(Debug)] struct Input { n: i32, } fn next_token(cin_lock: &mut io::StdinLock) -> String { cin_lock .by_ref() .bytes() .map(|c| c.unwrap() as char) .skip_while(|c| c.is_whitespace()) .take_while(|c| !c.is_whitespace()) .collect::<String>() } fn read_input(cin_lock: &mut io::StdinLock) -> Input { Input { n: next_token(cin_lock).parse().unwrap(), } } fn prime_numbers(n: i32) -> Vec<i32> { let mut numbers = (0..=n).collect::<Vec<_>>(); // numbers[0] = 0; // [0] == 0なので不要 numbers[1] = 0; let limit = (n as f64).sqrt() as usize; for i in 2..=limit { let x = numbers[i]; if x == 0 { continue; } let mut k = i + x as usize; while k <= n as usize { if numbers[k] != 0 { numbers[k] = 0; } k += x as usize; } } numbers.into_iter().filter(|x| *x != 0).collect() } #[derive(Clone, Copy)] enum GameResult { Win, Lose, } fn simulate(n: i32, primes: &[i32]) -> GameResult { let mut win = vec![false; (n + 1) as usize]; win[0] = true; win[1] = true; for i in 2..=n { for p in primes { if *p > i { break; } let next_n = (i - *p) as usize; if !win[next_n] { win[i as usize] = true; break; } } } if win[n as usize] { GameResult::Win } else { GameResult::Lose } } fn solve(input: Input, _cin_lock: &mut io::StdinLock) { let primes = prime_numbers(input.n); println!( "{}", match simulate(input.n, &primes) { GameResult::Win => "Win", GameResult::Lose => "Lose", } ); } fn main() { let cin = io::stdin(); let mut cin_lock = cin.lock(); let input = read_input(&mut cin_lock); solve(input, &mut cin_lock); }