题意:给出n块木板,它们分别的高度,现在要把它们裁切成k块,问裁切成的最大的高度
二分答案,上限是这n块木板里面的最大值 然后每一个答案去判断一下是否满足能够裁切成k块
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<set> 9 #include<queue> 10 #include<algorithm> 11 using namespace std; 12 13 typedef long long LL; 14 const int INF = (1<<30)-1; 15 const int mod=1000000007; 16 const int maxn=1000005; 17 18 double a[maxn]; 19 int n,k; 20 21 int ok(double x){ 22 int ans=0; 23 for(int i=1;i<=n;i++){ 24 ans+=(int)(a[i]/x); 25 } 26 if(ans<k) return 0; 27 return 1; 28 } 29 30 int main(){ 31 while(scanf("%d %d",&n,&k)!=EOF&&n&&k){ 32 double hmax=-1; 33 for(int i=1;i<=n;i++) scanf("%lf",&a[i]),hmax=max(hmax,a[i]); 34 35 double l=0.000,r=hmax; 36 37 while(r-l > 1e-6){ 38 double mid=(l+r)/2; 39 if(ok(mid)) l=mid; 40 else r=mid; 41 } 42 printf("%.2lf\n",l); 43 } 44 return 0; 45 }
时间: 2024-10-13 07:14:08