結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-05-31 17:55:15 |
| 言語 | Java (openjdk 25.0.2) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,464 bytes |
| 記録 | |
| コンパイル時間 | 2,988 ms |
| コンパイル使用メモリ | 84,464 KB |
| 実行使用メモリ | 772,940 KB |
| 最終ジャッジ日時 | 2026-03-28 02:26:23 |
| 合計ジャッジ時間 | 22,794 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 11 MLE * 5 -- * 17 |
ソースコード
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;
public class Yuki003 {
int bitCount(int value) {
int count = 0;
while (value > 0) {
count += value % 2;
value /= 2;
}
return count;
}
Yuki003() {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
System.out.println(search(N));
}
private int search(final int N) {
boolean[] visit = new boolean[N + 1];
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
int move = 1;
visit[1] = true;
while (list.size() > 0) {
LinkedList<Integer> next = new LinkedList<>();
for (int value : list) {
if (value == N) {
return move;
}
int bit = bitCount(value);
int prev = value - bit;
int nxt = value + bit;
if (1 <= prev && !visit[prev]) {
next.add(prev);
visit[value] = true;
}
if (nxt <= N && !visit[nxt]) {
next.add(nxt);
visit[value] = true;
}
}
list = next;
move++;
}
return -1;
}
public static void main(String[] args) {
new Yuki003();
}
}