社区讨论

一道站外题

灌水区参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@ltr88w3u
此快照首次捕获于
2024/03/14 20:49
2 年前
此快照最后确认于
2024/03/14 22:19
2 年前
查看原帖
地主有n块土地,其中第i块是ci×ri的方格组成的长方形。他雇k位农民种地。
农民工作量要相同,否则他们就不干活。地主需要从这n块地中圈出k块正方形土地给农民,这k块正方形土地,大小相同,且边长是整数。
例如一块7×4的土地可以圈出 6块2×2的土地 或者 2块3×3的土地。
地主希望尽可能多的土地能被耕种,请你帮他找到最大的边长。

输入

第一行包含两个整数n和k。(1≤n,k≤10^5)。
以下n行,每行包含两个整数ci和ri。(1≤ci,ri≤10^5)。
输入保证每个农民至少种1×1的土地,否则就浪费地主发出的工资了。

输出

最大可能的边长。

例子

输入

2 10
6 5
5 6

输出

2

代码

CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,k,c[100005],r[100005],minn=1000000,s; 
signed main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>c[i]>>r[i],minn=min(minn,min(c[i],r[i]));
	s=minn;
	while(1){
		ll t=0;
		for(int i=1;i<=n;i++)
		{
			t+=(c[i]/s)*(r[i]/s);			
		}
		if(t>=k){
		    cout<<s;
		    return 0;
		}
		s--;
	}

	return 0;
}

20分悬关QWQ

回复

0 条回复,欢迎继续交流。

正在加载回复...