結果

問題 No.3461 Min GCD
コンテスト
ユーザー msksknkn
提出日時 2026-03-14 20:17:35
言語 Java
(openjdk 25.0.2)
コンパイル:
javac -encoding UTF8 _filename_
実行:
java -ea -Xmx700m -Xss256M -DONLINE_JUDGE=true _class_
結果
AC  
実行時間 1,640 ms / 2,000 ms
コード長 1,261 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,908 ms
コンパイル使用メモリ 86,476 KB
実行使用メモリ 260,360 KB
最終ジャッジ日時 2026-03-14 20:17:50
合計ジャッジ時間 14,550 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

package no3461_minGCD;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		long k = sc.nextLong();
		ArrayList<ArrayList<Integer>> l = new ArrayList<>();
		int[] b = new int[n];
		int disable = 100001;
		for(int i = 0;i < n;i++) {
			int a = sc.nextInt();
			l.add(new ArrayList<>());
			for(int j = 1;j * j <= a;j++) {
				if((a % j) == 0) {
					if(j * j != a) {
						l.get(i).add(j);
						l.get(i).add(a / j);
					}else {
						l.get(i).add(j);
					}
				}
			}Collections.sort(l.get(i),Collections.reverseOrder());
			disable = Math.min(a + 1, disable);
		}for(int j = 0;j < n;j++) {
			b[j] = sc.nextInt();
		}int left = 1;
		int right = disable;
		while(left < right - 1) {
			int mid = (left + right)/2;
			long sum = 0;
			for(int i = 0;i < n;i++) {
				int min = Integer.MAX_VALUE;
				for(int s:l.get(i)) {
					if(s >= mid) {
						int t = (b[i] + s - 1)/s * s;
						min = Math.min(min, t - b[i]);
					}else {
						break;
					}
				}sum += min;
			}//System.out.println(sum + " " + mid);
			if(sum <= k) {
				left = mid;
			}else {
				right = mid;
			}
		}System.out.println(left);
	}

}
0