Slay the Spire A15H を終了した。ただ心臓で負けてしまったので素直には喜べない。
子どもがハロウィンで先生の仮装 (かぶりもの) に大泣きしたらしい。いつも妻が「お化けを呼ぶよ」なんて言い続けているせいでは……と思ったが怖いので言わない。
パナソニックグループ プログラミングコンテスト2023(AtCoder Beginner Contest 326)
- D - ABC Puzzle
https://atcoder.jp/contests/abc326/tasks/abc326_d
- 提出: https://atcoder.jp/contests/abc326/submissions/47099086
- 7WA
- "ABC.." の next_permutation のうち条件を満たすものだけにうまく枝刈りすれば間に合う
- next_permutation を呼び出さずに continue して無限ループしたり、状態のリセットを誤ったり、 N = 3, 4 のケースを忘れて "ABC.." に固定したりいろいろやってしまった
use proconio::{input, marker::Chars}; use superslice::Ext; fn g(ans: &mut [Vec<char>], n: usize, capital_r: &[char], capital_c: &[char], r: usize) -> bool { for (capital_r_i, ans_i) in capital_r.iter().copied().zip(ans.iter()).take(r) { match ans_i.iter().copied().find(|c| c != &'.') { None => return false, Some(first) => { if first != capital_r_i { return false; } } } } for (j, capital_c_j) in capital_c.iter().copied().enumerate() { match (0..r).map(|i| ans[i][j]).find(|c| c != &'.') { None => { if r == n { return false; } } Some(first) => { if first != capital_c_j { return false; } } } let count = (0..r) .map(|i| ans[i][j]) .filter(|c| c != &'.') .fold(vec![0; 3], |mut count, c| { count[(c as u8 - b'A') as usize] += 1; count }); if r == n { if count != vec![1; 3] { return false; } } else if count.iter().any(|c| c > &1) { return false; } } true } fn f(ans: &mut Vec<Vec<char>>, n: usize, capital_r: &[char], capital_c: &[char], r: usize) -> bool { if r == n { return g(ans, n, capital_r, capital_c, r); } for ans_i in ans.iter_mut().skip(r) { ans_i.sort(); } loop { if g(ans, n, capital_r, capital_c, r + 1) && f(ans, n, capital_r, capital_c, r + 1) { return true; } if !ans[r].next_permutation() { break; } } false } fn main() { input! { n: usize, capital_r: Chars, capital_c: Chars, }; let mut ans = vec![]; for _ in 0..n { let chars = "ABC..".chars().take(n).collect::<Vec<char>>(); ans.push(chars); } if f(&mut ans, n, &capital_r, &capital_c, 0) { println!("Yes"); for ans_i in ans.iter() { for ans_ij in ans_i.iter() { print!("{}", ans_ij); } println!(); } } else { println!("No"); } }
今日のコミット。
- kireta 1 commit
- rust-atcoder 1 commit