結果
問題 |
No.3 ビットすごろく
|
ユーザー |
![]() |
提出日時 | 2018-11-02 18:01:07 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 1,277 bytes |
コンパイル時間 | 12,618 ms |
コンパイル使用メモリ | 388,312 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-01 09:11:08 |
合計ジャッジ時間 | 13,806 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
use std::io::Read; fn main() { let mut buf = String::new(); std::io::stdin().read_to_string(&mut buf).unwrap(); let n: usize = buf.trim().parse().unwrap(); let mut positions: Vec<usize> = vec![1]; let mut is_checked: Vec<bool> = vec![false; n+1]; is_checked[1] = true; let mut layer: usize = 1; let mut answer: Option<usize> = None; while !positions.is_empty() { if is_checked[n] { answer = Some(layer); break; } let mut new_positions: Vec<usize> = vec![]; for p in positions.iter() { let ones: usize = p.count_ones() as usize; let f: usize = p + ones; let b: usize = p.saturating_sub(ones); if f > 1 && f <= n && !is_checked[f] { new_positions.push(f); is_checked[f] = true; } if b > 1 && b <= n && !is_checked[b] { new_positions.push(b); is_checked[b] = true; } } layer += 1; positions = new_positions; } if let Some(a) = answer { println!("{}", a); } else { println!("-1") } }