每日一题Day3_华华给月月准备礼物
题解:
一看就是二分题,注意下上下边界的确定即可。
AC代码:
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define inf -0x3f3f3f3f
#define me(a,b) memset(a,b,sizeof(a))
#define PII pair<int,int>
#define ull unsigned long long
#define ios std :: ios :: sync_with_stdio(false)
#define rep(i,a,b) for(int i = a;i <= b;i ++)
#define esp 1e-16
using namespace std;
const int maxn = 2e5 + 19;
int a[maxn] = {},n,k;
bool check(int x)
{
//cout << "x = " << x << endl;
int cnt = 0;
//if(x == 0)
rep(i,1,n) {
//cout << "cnt = " << cnt << ' ' << a[i] << endl;
if (a[i] / x > 0) cnt += a[i] / x;
if (cnt >= k) return 1;
}
return 0;
}
int main()
{
ios;
cin >> n >> k;
int maxx = 0;
rep(i, 1, n) {
cin >> a[i];
maxx = max(maxx, a[i]);
}
//cout << maxx << endl;
int l = 1, r = maxx,ans = 0;
while (l <= r) {
int mid = (r + l) >> 1;
if (check(mid)) {
l = mid + 1;
ans = max(ans, mid);
}
else r = mid - 1;
}
cout << ans << endl;
return 0;
} 
京公网安备 11010502036488号