Questions du test Blue Bridge Cup Questions du test précédent Chocolat divisé (Solution Java)
Description du problème
Lors de la Journée des enfants, les enfants K ont visité la maison de Xiao Ming en tant qu'invités. Xiao Ming a sorti une collection de chocolats pour divertir les enfants.
Xiao Ming a N morceaux de chocolat au total, et le i-ème morceau est un rectangle formé par des carrés Hi x Wi.
Pour être juste, Xiao Ming doit découper K morceaux de chocolat des N morceaux de chocolat à partager avec les enfants. Le chocolat coupé doit répondre:
- La forme est carrée et la longueur du côté est un entier
- Même taille
Par exemple, un morceau de chocolat 6x5 peut être coupé en 6 morceaux de chocolat 2x2 ou 2 morceaux de chocolat 3x3.
Bien sûr, les enfants espèrent tous que le chocolat qu'ils reçoivent est aussi gros que possible. Pouvez-vous aider Little Hi à calculer la longueur maximale des côtés?
Format d'entrée
La première ligne contient deux entiers N et K. (1 <= N, K <= 100000)
Chacune des N lignes suivantes contient deux entiers Hi et Wi. (1 <= Salut, Wi <= 100000)
Entrez pour vous assurer que chaque enfant peut obtenir au moins un chocolat 1x1.
Format de sortie
Sortez la longueur de côté maximale possible du chocolat carré coupé.
Exemple d'entrée
2 10
6 5
5 6
Exemple de sortie
2
Code
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();
}
}