結果
問題 |
No.3121 Prime Dance
|
ユーザー |
|
提出日時 | 2025-04-19 13:11:37 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,840 bytes |
コンパイル時間 | 13,936 ms |
コンパイル使用メモリ | 402,796 KB |
実行使用メモリ | 77,088 KB |
最終ジャッジ日時 | 2025-04-19 13:12:39 |
合計ジャッジ時間 | 24,901 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 2 |
other | AC * 8 WA * 12 TLE * 1 |
ソースコード
use std::collections::{HashSet, VecDeque}; use proconio::{input, marker::{Chars, Usize1}}; fn main() { let primes = [2_u8, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199].into_iter().collect::<HashSet<_>>(); input! { h: usize, w: usize, sx: Usize1, sy: Usize1, gx: Usize1, gy: Usize1, c: [Chars; h], } let mut grid = vec![vec![HashSet::new(); w]; h]; grid[sx][sy].insert([0_u8; 4]); let mut queue = VecDeque::new(); queue.push_back((sx, sy, [0; 4])); while let Some((i, j, ds)) = queue.pop_front() { // if (i, j) == (gx, gy) && ds.iter().all(|d| primes.contains(d) ) { // break; // } let mut next = |i2: usize, j2: usize, ds2: [_; 4]| { if c[i2][j2] != '#' && ds.iter().all(|&d| d < 100 ) && grid[i2][j2].insert(ds2) { queue.push_back((i2, j2, ds2)); } }; if i > 0 { let mut ds2 = ds; ds2[0] += 1; next(i - 1, j, ds2) } if i + 1 < h { let mut ds2 = ds; ds2[1] += 1; next(i + 1, j, ds2) } if j > 0 { let mut d2 = ds; d2[2] += 1; next(i, j - 1, d2) } if j + 1 < w { let mut d2 = ds; d2[3] += 1; next(i, j + 1, d2) } } let mut ans = 1_000_000_000; // eprintln!("{:?}", grid[gx][gy]); for ds in &grid[gx][gy] { if !ds.iter().all(|d| primes.contains(d) ) { continue; } let sum = ds.iter().map(|&d| d as i32 ).sum::<i32>(); ans = ans.min(sum); } println!("{ans}"); }