88分,WA#5找不到错误
查看原帖
88分,WA#5找不到错误
571443
c20060404楼主2025/1/26 17:42
#include<bits/stdc++.h>
using namespace std;
int main(){
	int k=1,mid=0,j=0;
	int N,K,max,i,ans=0,t=0;
	int H[100005],W[100005],T[100005];
	scanf("%d %d",&N,&K);
	for(int i=0;i<N;i++){//取出最长的边用于使用二分法 
		scanf("%d %d",&H[i],&W[i]);
		if(H[i]>W[i]) t=W[i];
		else t=H[i];
		if(t>max) max=t;
	}
	for(int i=0;i<N;i++){//使用二分法,储存每块巧克力能分割的最大分割边长 
		j=max;k=1;
		while(k<=j){
			mid=(k+j)/2;
		if(H[i]/mid==0||W[i]/mid==0){
			j=mid-1;
		}
		else {
			k=mid+1;
			T[i]=mid;//每块的最大分割边长 
		}	
		}	
	}
	sort(T,T+N);
	//对最大能分割的边长进行排序,用取数组内能分割的最大边长和一来作为区间循环, 。 
		j=T[N-1];k=1;
		while(k<=j){//使用二分法找出最大面积 
			mid=(j+k)/2;
			for(int i=0;i<N;i++){//二分法求能分够的最大巧克力边长 
			t+=(H[i]/mid)*(W[i]/mid);
		}		
			if(t>=K){
				k=mid+1;
				ans=mid;
			}
			else j=mid-1;
			t=0; 	
	}
	cout<<ans<<endl;
} 
2025/1/26 17:42
加载中...