結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
nobuta05
|
| 提出日時 | 2016-08-22 21:26:51 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,345 bytes |
| コンパイル時間 | 14,614 ms |
| コンパイル使用メモリ | 378,388 KB |
| 実行使用メモリ | 8,448 KB |
| 最終ジャッジ日時 | 2024-11-07 22:37:59 |
| 合計ジャッジ時間 | 21,847 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 3 TLE * 1 -- * 29 |
コンパイルメッセージ
warning: unreachable expression
--> src/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
--> src/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
--> src/main.rs:33:17
|
33 | let mut ret2 = judge(p-inc, max, &vec);
| ----^^^^
| |
| help: remove this `mut`
ソースコード
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");
}
}
nobuta05