1. 程式人生 > 實用技巧 >AtCoder Beginner Contest 174 E - Logs

AtCoder Beginner Contest 174 E - Logs

題意 :給你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)
using
namespace 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) { int
mid=(l+r)/2; if(check(mid)) { r=mid-1; ans=mid; } else { l=mid+1; } } cout<<ans<<endl; }