結果

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

ソースコード

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));
			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]);
					}
				}sum += min;
			}//System.out.println(sum + " " + mid);
			if(sum <= k) {
				left = mid;
			}else {
				right = mid;
			}
		}System.out.println(left);
	}

}
0