結果
問題 |
No.533 Mysterious Stairs
|
ユーザー |
![]() |
提出日時 | 2017-10-26 08:01:18 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 89 ms / 5,000 ms |
コード長 | 1,329 bytes |
コンパイル時間 | 12,670 ms |
コンパイル使用メモリ | 378,176 KB |
実行使用メモリ | 56,704 KB |
最終ジャッジ日時 | 2024-11-21 19:49:13 |
合計ジャッジ時間 | 16,045 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 28 |
ソースコード
use std::io::{stdin, Read}; use std::str::FromStr; #[allow(unused_imports)] use std::{cmp, mem, process}; #[allow(unused_imports)] use std::collections::{HashSet, BTreeMap, BTreeSet}; fn main() { let n: usize = read::<usize>(); let mut dp = vec![vec![0; 4]; 1000105]; dp[1][1] = 1; dp[2][2] = 1; dp[3][3] = 1; let modulo = 1000000007; for i in 1..n + 1 { for j in 1..4 { for k in 1..4 { if k != j { dp[i + j][j] = (dp[i + j][j] + dp[i][k]) % modulo; } } } } println!("{}", ((dp[n][1] + dp[n][2]) % modulo + dp[n][3]) % modulo); } #[allow(dead_code)] fn read_vec<T: FromStr>(n: usize) -> Vec<T> { let mut v = vec![]; for _ in 0..n { let a = read::<T>(); v.push(a); } v } #[allow(dead_code)] fn read_str() -> Vec<char> { let s: String = read(); s.chars().collect::<Vec<char>>() } #[allow(dead_code)] fn read<T: FromStr>() -> T { let stdin = stdin(); let stdin = stdin.lock(); let s = stdin .bytes() .map(|c| c.unwrap() as char) .skip_while(|c| c.is_whitespace()) .take_while(|c| !c.is_whitespace()) .collect::<String>(); s.parse::<T>().unwrap_or_else( |_| panic!("Faild to parse {}", s), ) }