問題の説明
子供の日には、K人の子供たちがシャオミンの家をゲストとして訪れました。シャオミンは子供たちを楽しませるためにチョコレートのコレクションを取り出しました。
Xiao Mingには合計N個のチョコレートがあり、そのうちi番目の部分はHi xWiの正方形で構成される長方形です。
公平を期すために、シャオミンは子供たちと共有するためにN個のチョコレートからK個のチョコレートを切り取る必要があります。カットチョコレートは満たす必要があります:
- 形状は正方形で、辺の長さは整数です
- 同じサイズ
たとえば、6x5チョコレートを6個の2x2チョコレートまたは2個の3x3チョコレートにカットできます。
もちろん、子供たちは皆、手に入るチョコレートができるだけ大きいことを望んでいます。リトルハイが最大辺の長さを計算するのを手伝ってくれませんか?
入力フォーマット
最初の行には、2つの整数NとKが含まれています。(1 <= N、K <= 100000)
次のN行のそれぞれには、2つの整数HiとWiが含まれています。(1 <=こんにちは、Wi <= 100000)
各子供が少なくとも1x1のチョコレートを手に入れることができるように入力します。
出力フォーマット
カットされたスクエアチョコレートの可能な最大辺の長さを出力します。
サンプル入力
2 10
6 5
5 6
サンプル出力
2
コード
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// n 块巧克力,k 个小朋友
int n,k;
n = sc.nextInt();
k = sc.nextInt();
int[] h = new int[n];
int[] w = new int[n];
int maxh,maxw;
h[0] = sc.nextInt();
w[0] = sc.nextInt();
maxh = h[0];
maxw = w[0];
for (int i = 1; i < n; i++) {
h[i] = sc.nextInt();
w[i] = sc.nextInt();
if(h[i] > w[i]) {
int temp = h[i];
h[i] = w[i];
w[i] = temp;
}
if(h[i] > maxh) maxh = h[i];
if(w[i] > maxw) maxw = w[i];
}
int max = maxw < maxh ? maxw : maxh;
while(max >= 1) {
int count = 0;
for (int i = 0; i < n; i++) {
count += (h[i]/max)*(w[i]/max);
}
if(count >= k) break;
max--;
}
System.out.println(max);
sc.close();
}
}