Preguntas de la prueba de Blue Bridge Cup Preguntas de la prueba anterior Chocolate dividido (solución Java)
Descripción del problema
El Día del Niño, los niños K visitaron la casa de Xiao Ming como invitados. Xiao Ming sacó una colección de chocolates para entretener a los niños.
Xiao Ming tiene N piezas de chocolate en total, de las cuales la i-ésima pieza es un rectángulo compuesto por cuadrados Hi x Wi.
Para ser justos, Xiao Ming necesita cortar K trozos de chocolate de los N trozos de chocolate para compartir con los niños. El chocolate cortado debe cumplir:
- La forma es cuadrada y la longitud del lado es un número entero
- Mismo tamaño
Por ejemplo, una pieza de chocolate de 6x5 se puede cortar en 6 piezas de chocolate 2x2 o 2 piezas de chocolate 3x3.
Por supuesto, todos los niños esperan que el chocolate que obtengan sea lo más grande posible. ¿Puedes ayudar a Little Hi a calcular la longitud máxima de los lados?
Formato de entrada
La primera línea contiene dos números enteros N y K. (1 <= N, K <= 100000)
Cada una de las siguientes N líneas contiene dos números enteros Hi y Wi. (1 <= Hola, Wi <= 100000)
Ingrese para asegurarse de que cada niño pueda obtener al menos un chocolate 1x1.
Formato de salida
Produzca la longitud lateral máxima posible del chocolate cuadrado cortado.
Entrada de muestra
2 10
6 5
5 6
Salida de muestra
2
Código
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();
}
}