リソースの制限
時間の制限:1.0秒メモリの制限:256.0MB
問題の説明
子供の日に、K人の子供がXiaomingの家を訪れました。シャオミンは子供たちを楽しませるためにチョコレートのコレクションを取り出しました。
Xiao Mingには合計N個のチョコレートがあり、そのうちi番目のチョコレートはHi xWiの正方形で構成される長方形です。
公平を期すために、シャオミンはN個のチョコレートからK個のチョコレートを切り取り、子供たちに配布する必要があります。カットチョコレートは満たす必要があります:
1.形は正方形、辺の長さは整数
2.サイズは同じ
たとえば、6x5チョコレート1個で2x2チョコレート6個または3x3チョコレート2個をカットできます。
もちろん、子供たちはできるだけ大きなチョコレートを手に入れたいと思っています。リトルハイが最大の辺の長さを計算するのを手伝ってくれませんか。
入力フォーマット
最初の行には、2つの整数NとKが含まれています。(1 <= N、K <= 100000)
次のN行のそれぞれには、2つの整数HiとWiが含まれています。(1 <=こんにちは、Wi <= 100000)
各子供が少なくとも1x1のチョコレートを手に入れることができるように入力します。
出力フォーマット
カットしたスクエアチョコレートの可能な最大辺の長さを出力します。
サンプル入力
2 10
6 5
5 6
サンプル出力
2
データ規模のコンベンション
<256M(仮想マシンを含む)ピークメモリ消費
CPU消費量<1000msの
要件に厳密に従って出力し、「入力してください...」のような余分なコンテンツを過剰に印刷しないでください。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int main(){
int n,k,num[100009]={
},mi,mimax=0,key=0;
cin>>n>>k;
for(int i=0;i<n;i++){
int h,w;
cin>>h>>w;
mi=min(h,w);
mimax=max(mimax,mi);
for(int j=mi;j>=1;j--){
num[j]=num[j]+(h/j)*(w/j);//记录每一块被分成尺寸的数量
if(j<=key)break;
if(num[j]>k){
//若数量大于k 则记录key 当下次j==k就退出(没必要
key=j;
break;
}
}
}for(int i=mimax;i>0;i--){
//从大到小寻找满足条件值
if(num[i]>=k){
cout<<i;
return 0;
}
}
return 0;
}