蓝桥杯2017初赛分巧克力
题目链接http://oj.ecustacm.cn/problem.php?id=1323
用二分法,暴力求解会超时
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct QK {
int x, y;
}qk;
qk a[100010];
int n, k;
int solve(int len) {
int sum = 0;
int x, y;
for (int i = 0; i < n; i++) {
x = a[i].x / len;
y = a[i].y / len;
sum += x * y;
}
return sum;
}
int main() {
cin >> n >> k;
int x, y;
int len = 0;
for (int i = 0; i < n; i++) {
cin >> x >> y;
len = max(max(x, len), y);//找出现的边最大值
a[i].x = x;
a[i].y = y;
}
int l, r,mid;
l = 1, r = len;
int sum,maxx=0;//maxx记录满足要求的边
while (l<=r) {
mid = (l + r) / 2;
sum = solve(mid);
if (sum < k) {
r = mid - 1;
}
else if (sum >= k) {
l = mid + 1;
maxx = max(maxx, mid);//满足要求的最大边
}
}
cout << maxx;
return 0;
}
仅供个人温习