結果
問題 |
No.3299 K-th MMA String
|
ユーザー |
![]() |
提出日時 | 2025-10-05 14:57:36 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,608 bytes |
コンパイル時間 | 12,126 ms |
コンパイル使用メモリ | 398,616 KB |
実行使用メモリ | 8,192 KB |
最終ジャッジ日時 | 2025-10-05 14:57:55 |
合計ジャッジ時間 | 18,147 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 3 WA * 17 |
ソースコード
#![allow(unused_imports)] fn main() { input! { n: usize, mut k: Usize1, } // M -> 1, A -> 0 let mut dp = mvec![0usize; (n+1, 1<<2)]; dp[n][3] += 1; for i in (0..n).rev() { for s in 0..1 << 2 { for c in 0..2 { if c == 1 && s == 2 { continue; } let w = dp[i + 1][s]; let v = &mut dp[i][(c << 1) | (s >> 1)]; *v = (*v).saturating_add(w); } } } for i in 0..n - 2 { let p = 1 << (n - i - 2); for v in &mut dp[i] { *v = p - *v; } } eprintln!("{dp:?}"); let mut ans = String::new(); let mut ps = 0; for i in (0..n - 2).step_by(2) { eprintln!("{i} {ps} {k}"); let mut ok = vec![false; 4]; if ps == 1 { dp[i][2] = 1 << (n - i - 1); ok[2] = true; } if ps == 3 { dp[i][0] = 1 << (n - i - 1); dp[i][1] = 1 << (n - i - 1); ok[0] = true; ok[1] = true; } for s in 0..4 { if k < dp[i][s] { if ok[s] { for i in i..n { ans.push(if k >> (n - i - 1) & 1 == 1 { 'M' } else { 'A' }); } println!("{ans}"); return; } else { ps = s; ans.push(if s & 1 == 1 { 'M' } else { 'A' }); ans.push(if s >> 1 == 1 { 'M' } else { 'A' }); break; } } else { k -= dp[i][s]; } } } for i in (n - 1) / 2 * 2..n { ans.push(if k >> (n - i - 1) & 1 == 1 { 'M' } else { 'A' }); } println!("{ans}"); } /* 0 [0, 0, 0, 1] => MM + 0 => MMA 2 [0, 1, 0, 3], [0, 0, 0, 1] => MM + 1 => MMAM */ use proconio::{input, marker::*}; use std::{cmp::Reverse, collections::*}; #[macro_export] macro_rules! chmax { ($a:expr, $b:expr) => {{ let tmp = $b; if $a < tmp { $a = tmp; true } else { false } }}; } #[macro_export] macro_rules! chmin { ($a:expr, $b:expr) => {{ let tmp = $b; if $a > tmp { $a = tmp; true } else { false } }}; } #[macro_export] /// mvec![] macro_rules! mvec { ($val:expr; ()) => { $val }; ($val:expr; ($size:expr $(,$rest:expr)*)) => { vec![mvec![$val; ($($rest),*)]; $size] }; }