結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
n_gojo
|
| 提出日時 | 2020-04-10 18:10:55 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 181 ms / 5,000 ms |
| コード長 | 1,432 bytes |
| コンパイル時間 | 4,075 ms |
| コンパイル使用メモリ | 78,992 KB |
| 実行使用メモリ | 45,084 KB |
| 最終ジャッジ日時 | 2024-07-01 09:45:08 |
| 合計ジャッジ時間 | 10,769 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class No3 {
public static void main(String[] args) {
// 標準入力から読み込む際に、Scannerオブジェクトを使う。
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int ans = 1;
Set oldNo = new HashSet<>();
Set nowNo = new HashSet<>();
Set nextNo = new HashSet<>();
nowNo.add(1);
oldNo.add(1);
while (ans != 10000) {
if (nowNo.contains(n)) {
System.out.println(ans);
return;
}
for(Iterator<Integer> iterator = nowNo.iterator(); iterator.hasNext(); ) {
Integer value = iterator.next();
int i = value;
int s = 0;
while (i > 0) {
s += i%2;
i/=2;
}
if (!oldNo.contains(value + s) && n >= (value + s)) {
nextNo.add(value + s);
oldNo.add(value + s);
}
if (!oldNo.contains(value - s)) {
nextNo.add(value - s);
oldNo.add(value - s);
}
}
nowNo = nextNo;
nextNo = new HashSet<>();
ans++;
}
System.out.println("-1");
}
}
n_gojo