結果

問題 No.3 ビットすごろく
ユーザー dogwood0424dogwood0424
提出日時 2017-12-05 10:15:37
言語 Java21
(openjdk 21)
結果
AC  
実行時間 146 ms / 5,000 ms
コード長 967 bytes
コンパイル時間 3,572 ms
コンパイル使用メモリ 78,960 KB
実行使用メモリ 54,492 KB
最終ジャッジ日時 2024-07-01 08:51:43
合計ジャッジ時間 9,250 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 131 ms
53,596 KB
testcase_01 AC 133 ms
53,596 KB
testcase_02 AC 131 ms
53,748 KB
testcase_03 AC 135 ms
53,764 KB
testcase_04 AC 136 ms
54,176 KB
testcase_05 AC 137 ms
54,116 KB
testcase_06 AC 136 ms
54,112 KB
testcase_07 AC 136 ms
54,492 KB
testcase_08 AC 137 ms
54,180 KB
testcase_09 AC 140 ms
53,988 KB
testcase_10 AC 146 ms
53,692 KB
testcase_11 AC 137 ms
53,760 KB
testcase_12 AC 139 ms
54,408 KB
testcase_13 AC 136 ms
54,088 KB
testcase_14 AC 143 ms
53,624 KB
testcase_15 AC 139 ms
53,832 KB
testcase_16 AC 142 ms
54,348 KB
testcase_17 AC 145 ms
54,268 KB
testcase_18 AC 125 ms
54,192 KB
testcase_19 AC 144 ms
54,152 KB
testcase_20 AC 136 ms
53,648 KB
testcase_21 AC 133 ms
54,140 KB
testcase_22 AC 143 ms
53,844 KB
testcase_23 AC 143 ms
53,772 KB
testcase_24 AC 144 ms
54,188 KB
testcase_25 AC 146 ms
54,104 KB
testcase_26 AC 133 ms
53,824 KB
testcase_27 AC 137 ms
54,260 KB
testcase_28 AC 146 ms
53,988 KB
testcase_29 AC 137 ms
53,872 KB
testcase_30 AC 134 ms
54,192 KB
testcase_31 AC 135 ms
54,120 KB
testcase_32 AC 137 ms
53,860 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;
import java.util.Scanner;

public class No3 {

	public static void main(String[]args) {
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();
		boolean [] boo = new boolean[n];
		int []m = new int[n];
		Arrays.fill(m, Integer.MAX_VALUE);

		for(int i=0;i<n;i++) {
			boo[i]=false;
		}
		Queue<Integer> q = new ArrayDeque<Integer>();
		boo[0]=true;
		q.add(1);
		m[0]=1;
		while(!q.isEmpty()) {
			int now = q.poll();
			int bitcnt = Integer.bitCount(now);
			int b = now-bitcnt;
			int f = now+bitcnt;
			if(b>0) {
				m[b-1]=Math.min(m[b-1],m[now-1]+1);
				if(!boo[b-1]) {
					q.add(b);
				}
				boo[b-1]=true;
			}
			if(f<=n) {
				m[f-1]=Math.min(m[f-1],m[now-1]+1);
				if(!boo[f-1]) {
					q.add(f);
				}
				boo[f-1]=true;
			}

		}

		if(m[n-1]==Integer.MAX_VALUE) {
			System.out.println(-1);
		}
		else {
			System.out.println(m[n-1]);
		}



		sc.close();

	}



}
0