東京海上日動プログラミングコンテスト2023(ABC307: AtCoder Beginner Contest 307)
- E - Distinct Adjacent
https://atcoder.jp/contests/abc307/tasks/abc307_e
- 提出: https://atcoder.jp/contests/abc307/submissions/44649944
O(NM)
をO(N)
にするために DP の状態の M 個の整数の部分を 人 1 の整数かそれ以外かの 2 状態にする- 解説を聞くとあっさり解けるものの気付けなかった
use modint::ModInt998244353 as ModInt; use proconio::input; fn main() { input! { n: usize, m: usize, }; let mut dp = (ModInt::new(1), ModInt::new(0)); for _ in 1..n { dp = (dp.1, dp.0 * (m - 1) + dp.1 * (m - 2)); } let ans = dp.1 * m; println!("{}", ans); } // modint
今日のコミット。