社区讨论
一道站外题
灌水区参与者 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 条回复,欢迎继续交流。
正在加载回复...