結果

問題 No.3 ビットすごろく
ユーザー nobuta05nobuta05
提出日時 2016-08-22 21:26:51
言語 Rust
(1.77.0)
結果
TLE  
実行時間 -
コード長 1,345 bytes
コンパイル時間 4,377 ms
コンパイル使用メモリ 155,648 KB
実行使用メモリ 10,752 KB
最終ジャッジ日時 2024-04-25 11:18:35
合計ジャッジ時間 10,922 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 1 ms
5,248 KB
testcase_02 AC 1 ms
5,376 KB
testcase_03 TLE -
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 -- -
権限があれば一括ダウンロードができます
コンパイルメッセージ
warning: unreachable expression
  --> main.rs:49:5
   |
25 | /     match vec.binary_search(&p) {
26 | |         Ok(_) => {return -1},
27 | |         Err(_) => {
28 | |             let inc = num2bin(p as u32);
...  |
47 | |         },
48 | |     }
   | |_____- any code following this `match` expression is unreachable, as all arms diverge
49 |       -1
   |       ^^ unreachable expression
   |
   = note: `#[warn(unreachable_code)]` on by default

warning: variable does not need to be mutable
  --> main.rs:32:17
   |
32 |             let mut ret1 = judge(p+inc, max, &vec);
   |                 ----^^^^
   |                 |
   |                 help: remove this `mut`
   |
   = note: `#[warn(unused_mut)]` on by default

warning: variable does not need to be mutable
  --> main.rs:33:17
   |
33 |             let mut ret2 = judge(p-inc, max, &vec);
   |                 ----^^^^
   |                 |
   |                 help: remove this `mut`

warning: 3 warnings emitted

ソースコード

diff #

use std::io;

fn num2bin(p: u32) -> u32 {
    let mut cnt = 0u32;
    let mut x = p;
    while x > 0 {

        cnt += x & 1;
        x = x >> 1;
    }
    cnt
}

fn judge(p: i32, max: i32, arr: &Vec<i32>) -> i32 {
    let mut vec = Vec::new();
    vec.extend_from_slice(&arr);
    vec.sort();

    if p == max {
        return 1;
    }
    else if p < 1 || max < p {
        return -1;
    }
    match vec.binary_search(&p) {
        Ok(_) => {return -1},
        Err(_) => {
            let inc = num2bin(p as u32);
            let inc = inc as i32;
            vec.push(p);

            let mut ret1 = judge(p+inc, max, &vec);
            let mut ret2 = judge(p-inc, max, &vec);

            if ret1 > 0 && ret2 > 0 {
                return std::cmp::min(ret1, ret2) + 1;
            }
            else if ret1 > 0 && ret2 < 0 {
                return ret1 + 1;
            }
            else if ret2 > 0 {
                return ret2 + 1;
            }
            else {
                return -1;
            }
        },
    }
    -1
}

fn main()
{
    let mut num = String::new();
    io::stdin().read_line(&mut num).ok().expect("ERROR");
    let num: i32 = num.trim().parse().ok().expect("ERROR");
    let ret = judge(1, num, &Vec::new());

    if ret > 0 {
        println!("{}", ret);
    }
    else {
        println!("-1");
    }
}
0