每日一题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; }