結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-05-31 17:32:19 |
| 言語 | Java (openjdk 23) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,601 bytes |
| コンパイル時間 | 4,033 ms |
| コンパイル使用メモリ | 79,844 KB |
| 実行使用メモリ | 157,020 KB |
| 最終ジャッジ日時 | 2024-07-06 13:01:52 |
| 合計ジャッジ時間 | 16,088 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 14 TLE * 2 -- * 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];
ArrayList<Integer> list = new ArrayList<>();
ArrayList<Integer> next = new ArrayList<>();
list.add(1);
int move = 1;
visit[1] = true;
while (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
final Integer value = list.get(i);
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.clear();
list.addAll(next);
next.clear();
move++;
}
return -1;
}
public static void main(String[] args) {
new Yuki003();
}
}