結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-06-20 14:10:03 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,695 bytes |
| コンパイル時間 | 2,740 ms |
| コンパイル使用メモリ | 78,812 KB |
| 実行使用メモリ | 50,944 KB |
| 最終ジャッジ日時 | 2024-10-11 05:27:13 |
| 合計ジャッジ時間 | 6,036 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 15 WA * 18 |
ソースコード
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
proconScan proScan = new proconScan(" ");
Integer A = proScan.scanInteger1();
Integer[] visited = new Integer[A + 1];
Arrays.fill(visited, 0);
visited[1] = 1;
Queue<Integer> q = new ArrayDeque<>();
q.add(1);
Integer u, move, v1, v2;
while (!q.isEmpty()) {
u = q.poll();
if (u == A) {
System.out.println(visited[u]);
proScan.proconEnd();
return;
}
move = Integer.bitCount(u);
v1 = u + move;
if (v1 <= A && visited[v1] == 0) {
q.add(v1);
visited[v1] = visited[u] + 1;
}
v2 = u - move;
if (v2 > 0 && visited[v2] == 0) {
q.add(v2);
visited[v2] = visited[u] + 1;
}
}
System.out.println(-1);
proScan.proconEnd();
}
}
class proconScan {
private BufferedReader br;
private String inLine;
private String[] inString;
private Integer idx;
private String splitChar;
public proconScan() {
br = new BufferedReader(new InputStreamReader(System.in));
idx = 0;
splitChar = " ";
}
public proconScan(String split) {
br = new BufferedReader(new InputStreamReader(System.in));
idx = 0;
splitChar = split;
}
public void proconEnd() throws IOException {
// TODO 自動生成されたメソッド・スタブ
br.close();
}
public String scan() throws IOException {
idx = 0;
inLine = br.readLine();
inString = inLine.split(splitChar, 0);
return inLine;
}
public Integer scanInteger1() throws IOException {
scan();
return Integer.parseInt(inString[0]);
}
public String backLine() {
return inLine;
}
public String nextString() {
return inString[idx++];
}
public String[] getString() {
return inString;
}
public Integer nextInt() {
Integer num;
try {
num = Integer.parseInt(inString[idx++]);
} catch (NumberFormatException e) {
num = null;// TODO: handle exception
}
return num;
}
public Integer[] getInt() {
Integer[] num = new Integer[this.getLen()];
for (int i = 0; i < this.getLen(); i++) {
num[i] = Integer.parseInt(inString[i]);
}
return num;
}
public Float nextFloat() {
Float num;
try {
num = Float.parseFloat(inString[idx++]);
} catch (NumberFormatException e) {
num = null;// TODO: handle exception
}
return num;
}
public Float[] getFloat() {
Float[] num = new Float[this.getLen()];
for (int i = 0; i < this.getLen(); i++) {
num[i] = Float.parseFloat(inString[i]);
}
return num;
}
public Integer getLen() {
return inString.length;
}
}