結果
問題 |
No.2867 NOT FOUND 404 Again
|
ユーザー |
|
提出日時 | 2024-08-30 22:10:44 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 211 ms / 3,000 ms |
コード長 | 1,507 bytes |
コンパイル時間 | 13,251 ms |
コンパイル使用メモリ | 402,244 KB |
実行使用メモリ | 14,796 KB |
最終ジャッジ日時 | 2024-08-30 22:11:01 |
合計ジャッジ時間 | 16,867 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 18 |
コンパイルメッセージ
warning: variable `N` should have a snake case name --> src/main.rs:7:9 | 7 | N: Chars, | ^ help: convert the identifier to snake case: `n` | = note: `#[warn(non_snake_case)]` on by default warning: variable `N` should have a snake case name --> src/main.rs:10:9 | 10 | let N = N.into_iter().map(|x| x.to_digit(10).unwrap() as usize ).collect::<Vec<_>>(); | ^ help: convert the identifier to snake case: `n`
ソースコード
use proconio::{input, marker::Chars}; const MOD: usize = 998244353; fn main() { input! { N: Chars, } let N = N.into_iter().map(|x| x.to_digit(10).unwrap() as usize ).collect::<Vec<_>>(); fn trans(state: usize, digit: usize) -> usize { match (state, digit) { (0, 4) => 1, (1, 0) => 2, (1, 4) => 1, (2, 4) => 3, _ => 0 } } let mut eq = [0; 4]; let mut lt = [0; 4]; eq[0] = 1; for digit in N { let mut eq_next = [0; 4]; let mut lt_next = [0; 4]; // lt -> lt for d in 0 ..= 9 { for state in 0 .. 3 { let state_next = trans(state, d); lt_next[state_next] += lt[state]; lt_next[state_next] %= MOD; } } // eq -> lt for d in 0 .. digit { for state in 0 .. 3 { let state_next = trans(state, d); lt_next[state_next] += eq[state]; lt_next[state_next] %= MOD; } } // eq -> eq { let d = digit; for state in 0 .. 3 { let state_next = trans(state, d); eq_next[state_next] += eq[state]; eq_next[state_next] %= MOD; } } eq = eq_next; lt = lt_next; } let ans = (eq[0] + eq[1] + eq[2] + lt[0] + lt[1] + lt[2] + MOD - 1) % MOD; println!("{ans}"); }