ブルーブリッジカップのテストの質問以前のテストの質問分割チョコレート(Javaソリューション)

ブルーブリッジカップのテストの質問以前のテストの質問分割チョコレート(Javaソリューション)

問題の説明

子供の日には、K人の子供たちがシャオミンの家をゲストとして訪れました。シャオミンは子供たちを楽しませるためにチョコレートのコレクションを取り出しました。
Xiao Mingには合計N個のチョコレートがあり、そのうちi番目の部分はHi xWiの正方形で構成される長方形です。

公平を期すために、シャオミンは子供たちと共有するためにN個のチョコレートからK個のチョコレートを切り取る必要があります。カットチョコレートは満たす必要があります:

  1. 形状は正方形で、辺の長さは整数です
  2. 同じサイズ

たとえば、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();
	}
}

おすすめ

転載: blog.csdn.net/L333333333/article/details/105148137