2023-08-17 ABC307 E を解いた
東京海上日動プログラミングコンテスト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
今日のコミット。