【題目鏈接】
http://noi.openjudge.cn/ch0111/04/
【算法】
顯然是二分的,但是這個精度有毒。精確到小數點后兩位,例如若用double存4則為3.9999,所以將所給數乘以100向上取整后存在int數組里,然后二分即可。
【代碼】
1 #include <bits/stdc++.h> 2 using namespace std; 3 int n,k,l=0,r=1e7; 4 double tmp; 5 int a[10010]; 6 int main() 7 { 8 scanf("%d%d",&n,&k); 9 for(int i=1;i<=n;i++) scanf("%lf",&tmp),a[i]=ceil(tmp*100); 10 while(l<r) { 11 int mid=(l+r+1)/2; 12 int rec=0; 13 for(int i=1;i<=n;i++) rec+=a[i]/mid; 14 if(rec>=k) l=mid; 15 else r=mid-1; 16 } 17 printf("%.2lf",l/100.00); 18 return 0; 19 }