AtCoder Beginner Contest 174 E - Logs
阿新 • • 發佈:2020-08-03
題意 :給你N個木頭,長度分別是ai
讓你切K次,
切完後,讓你求長度最大的木頭最小值,(最大值最小)
題解
考慮一個value ,我切K次能不能保證所有木頭都小於value
一個木塊的長度為len,那切完後小於等於value,就需要 (len-1)/value 次 (上取整-1,手玩一下想想)
所以二分一下找一下這個value就行了
#include<bits/stdc++.h> #define pb push_back #define fi first #define se second #define io std::ios::sync_with_stdio(false) usingnamespace std; typedef long long ll; typedef pair<int,int> pii; const int P = 1e9+7, INF = 0x3f3f3f3f; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int qpow(int a,int n) { int r=1%P; for (a%=P; n; a=a*a%P,n>>=1)if(n&1)r=r*a%P; return r; } const int maxn=2e5+50; int a[maxn];int n,k; int check(int x) { int kk=0; for(int i=1;i<=n;i++) { kk+=(a[i]-1)/x; } if(kk>k) return 0; else return 1; } int main() { cin>>n>>k; for(int i=1;i<=n;i++) { cin>>a[i]; } int l=1,r=1e9; int ans=0; while(l<=r) { intmid=(l+r)/2; if(check(mid)) { r=mid-1; ans=mid; } else { l=mid+1; } } cout<<ans<<endl; }