結果
問題 | No.5006 Hidden Maze |
ユーザー | ntk-ta01 |
提出日時 | 2022-06-12 15:32:43 |
言語 | Rust (1.77.0 + proconio) |
結果 |
TLE
|
実行時間 | - |
コード長 | 4,208 bytes |
コンパイル時間 | 1,365 ms |
実行使用メモリ | 39,592 KB |
スコア | 0 |
最終ジャッジ日時 | 2022-06-12 15:33:27 |
合計ジャッジ時間 | 7,902 ms |
ジャッジサーバーID (参考情報) |
judge14 / judge15 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | TLE | - |
testcase_01 | -- | - |
testcase_02 | -- | - |
testcase_03 | -- | - |
testcase_04 | -- | - |
testcase_05 | -- | - |
testcase_06 | -- | - |
testcase_07 | -- | - |
testcase_08 | -- | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
testcase_11 | -- | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
testcase_21 | -- | - |
testcase_22 | -- | - |
testcase_23 | -- | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
testcase_33 | -- | - |
testcase_34 | -- | - |
testcase_35 | -- | - |
testcase_36 | -- | - |
testcase_37 | -- | - |
testcase_38 | -- | - |
testcase_39 | -- | - |
testcase_40 | -- | - |
testcase_41 | -- | - |
testcase_42 | -- | - |
testcase_43 | -- | - |
testcase_44 | -- | - |
testcase_45 | -- | - |
testcase_46 | -- | - |
testcase_47 | -- | - |
testcase_48 | -- | - |
testcase_49 | -- | - |
testcase_50 | -- | - |
testcase_51 | -- | - |
testcase_52 | -- | - |
testcase_53 | -- | - |
testcase_54 | -- | - |
testcase_55 | -- | - |
testcase_56 | -- | - |
testcase_57 | -- | - |
testcase_58 | -- | - |
testcase_59 | -- | - |
testcase_60 | -- | - |
testcase_61 | -- | - |
testcase_62 | -- | - |
testcase_63 | -- | - |
testcase_64 | -- | - |
testcase_65 | -- | - |
testcase_66 | -- | - |
testcase_67 | -- | - |
testcase_68 | -- | - |
testcase_69 | -- | - |
testcase_70 | -- | - |
testcase_71 | -- | - |
testcase_72 | -- | - |
testcase_73 | -- | - |
testcase_74 | -- | - |
testcase_75 | -- | - |
testcase_76 | -- | - |
testcase_77 | -- | - |
testcase_78 | -- | - |
testcase_79 | -- | - |
testcase_80 | -- | - |
testcase_81 | -- | - |
testcase_82 | -- | - |
testcase_83 | -- | - |
testcase_84 | -- | - |
testcase_85 | -- | - |
testcase_86 | -- | - |
testcase_87 | -- | - |
testcase_88 | -- | - |
testcase_89 | -- | - |
testcase_90 | -- | - |
testcase_91 | -- | - |
testcase_92 | -- | - |
testcase_93 | -- | - |
testcase_94 | -- | - |
testcase_95 | -- | - |
testcase_96 | -- | - |
testcase_97 | -- | - |
testcase_98 | -- | - |
testcase_99 | -- | - |
コンパイルメッセージ
warning: constant is never used: `TIMELIMIT` --> Main.rs:42:1 | 42 | const TIMELIMIT: f64 = 1.935; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default warning: field is never read: `p` --> Main.rs:49:5 | 49 | pub p: usize, | ^^^^^^^^^^^^ warning: struct is never constructed: `Grid` --> Main.rs:52:8 | 52 | struct Grid { | ^^^^ warning: 3 warnings emitted
ソースコード
macro_rules! input { ($($r:tt)*) => { let stdin = std::io::stdin(); let mut bytes = std::io::Read::bytes(std::io::BufReader::new(stdin.lock())); let mut next = move || -> String{ bytes.by_ref().map(|r|r.unwrap() as char) .skip_while(|c|c.is_whitespace()) .take_while(|c|!c.is_whitespace()) .collect() }; input_inner!{next, $($r)*} }; } macro_rules! input_inner { ($next:expr) => {}; ($next:expr,) => {}; ($next:expr, $var:ident : $t:tt $($r:tt)*) => { let $var = read_value!($next, $t); input_inner!{$next $($r)*} }; } macro_rules! read_value { ($next:expr, ( $($t:tt),* )) => { ($(read_value!($next, $t)),*) }; ($next:expr, [ $t:tt ; $len:expr ]) => { (0..$len).map(|_| read_value!($next, $t)).collect::<Vec<_>>() }; ($next:expr, chars) => { read_value!($next, String).chars().collect::<Vec<char>>() }; ($next:expr, usize1) => (read_value!($next, usize) - 1); ($next:expr, [ $t:tt ]) => {{ let len = read_value!($next, usize); read_value!($next, [$t; len]) }}; ($next:expr, $t:ty) => ($next().parse::<$t>().expect("Parse error")); } type Output = String; const TIMELIMIT: f64 = 1.935; const DIJ: [(usize, usize); 4] = [(0, !0), (!0, 0), (0, 1), (1, 0)]; const DIR: [char; 4] = ['L', 'U', 'R', 'D']; struct Input { pub h: usize, pub w: usize, pub p: usize, } struct Grid { pub yoko: Vec<Vec<Vec<f64>>>, // 確率的に壁がある } fn main() { let input = parse_input(); let mut grid = { let mut grid = vec![vec![vec![0.0; 4]; input.w]; input.h]; for j in 0..input.w { grid[0][j][1] = 1.0; grid[input.h - 1][j][3] = 1.0; } for i in 0..input.h { grid[i][0][0] = 1.0; grid[i][input.w - 1][2] = 1.0; } grid }; let mut out = vec![3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]; loop { println!("{}", parse_output(&out)); let feed = { let mut s = String::new(); std::io::stdin().read_line(&mut s).unwrap(); let s = s.trim(); s.parse::<i32>().unwrap() }; if feed == -1 { break; } random_walk(&input, &mut out,&mut grid, feed); } } fn random_walk(input: &Input, out: &mut Vec<usize>, grid: &mut Vec<Vec<Vec<f64>>>, feed: i32) { let feed = feed as usize; let mut h = 0; let mut w = 0; for o in out.iter().take(feed) { h += DIJ[*o].0; w += DIJ[*o].1; } grid[h][w][out[feed]] = 1.0; // bfsして新しくoutを作る let mut que = std::collections::VecDeque::new(); let mut visited = vec![vec![false; input.w]; input.h]; let mut prev = vec![vec![4; input.w]; input.h]; visited[0][0] = true; que.push_back((0,0)); while !que.is_empty() { let v = que.pop_front().unwrap(); for (d,(di, dj)) in DIJ.iter().enumerate() { let ni = v.0 + *di; let nj = v.1 + *dj; if input.h <= ni || input.w <= nj { continue; } if visited[ni][nj] || grid[v.0][v.1][d] == 1.0 { continue; } visited[ni][nj] = true; prev[ni][nj] = d; que.push_back((ni, nj)); } } for row in visited.iter() { for b in row { if *b { eprint!("o"); } else{ eprint!("_"); } } eprintln!(); } // 経路復元 let mut new_out = vec![]; let mut v = (input.h - 1, input.w - 1); while v != (0,0) { let i = prev[v.0][v.1]; if i == 4 { break; } new_out.push(i); v.0 += DIJ[i ^ 2].0; v.1 += DIJ[i ^ 2].1; } new_out.reverse(); *out = new_out; } fn parse_input() -> Input { input!{ h: usize, w: usize, p: usize, } Input { h, w, p } } fn parse_output(out: &Vec<usize>) -> Output { out.iter().map(|o| DIR[*o]).collect() }