結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-06-20 14:11:13 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 64 ms / 5,000 ms |
| コード長 | 2,659 bytes |
| コンパイル時間 | 2,214 ms |
| コンパイル使用メモリ | 78,572 KB |
| 実行使用メモリ | 50,500 KB |
| 最終ジャッジ日時 | 2024-07-01 08:00:40 |
| 合計ジャッジ時間 | 5,161 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
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);
while (!q.isEmpty()) {
int u = q.poll();
if (u == A) {
System.out.println(visited[u]);
return;
}
int move = Integer.bitCount(u);
int v1 = u + move;
if (v1 <= A && visited[v1] == 0) {
q.add(v1);
visited[v1] = visited[u] + 1;
}
int 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;
}
}