結果
| 問題 | No.3 ビットすごろく | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2020-10-22 13:21:38 | 
| 言語 | Rust (1.83.0 + proconio) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 1 ms / 5,000 ms | 
| コード長 | 1,218 bytes | 
| コンパイル時間 | 13,084 ms | 
| コンパイル使用メモリ | 378,264 KB | 
| 実行使用メモリ | 6,944 KB | 
| 最終ジャッジ日時 | 2024-07-01 09:58:49 | 
| 合計ジャッジ時間 | 14,143 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 33 | 
ソースコード
use std::collections::VecDeque;
fn getline() -> String{
	let mut __ret=String::new();
	std::io::stdin().read_line(&mut __ret).ok();
	return __ret;
}
fn main() {
    let n: usize = getline().trim().parse().unwrap();
    let mut masu: Vec<i32> = vec![-1; n + 1];
    let mut queue: VecDeque<usize> = VecDeque::new();
    masu[1] = 1;
    queue.push_back(1);
    while !queue.is_empty() {
        let current_position = queue.pop_front().unwrap();
        let bit_count_ones: usize = current_position.count_ones() as usize;
        if current_position - bit_count_ones > 0 && masu[current_position - bit_count_ones] == -1  {
            masu[current_position - bit_count_ones] = masu[current_position] + 1;
            queue.push_back(current_position - bit_count_ones);
        }
        if current_position + bit_count_ones <= n && masu[current_position + bit_count_ones] == -1 {
            masu[current_position + bit_count_ones] = masu[current_position] + 1;
            queue.push_back(current_position + bit_count_ones);
        }
    }
    // 結局最後のマスに到達しているかしていないかなのでそれを出力する(到達していない場合は -1)
    println!("{}", masu[n]);
}
            
            
            
        