Preguntas de la prueba de Blue Bridge Cup Preguntas de la prueba anterior Chocolate dividido (solución Java)

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:

  1. La forma es cuadrada y la longitud del lado es un número entero
  2. 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();
	}
}

Supongo que te gusta

Origin blog.csdn.net/L333333333/article/details/105148137
Recomendado
Clasificación