百练(网线主管)(double精度,血的教训!)

链接:http://bailian.openjudge.cn/practice/1064/
思路:二分法,但是题目数据卡了double的精度,所以一定需要把米转化为整数的厘米来算,以后一定要注意精度的问题啊!!!!

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*************************************************************************
> File Name: wxzg.cpp
> Author:
> Mail:
> Created Time: Fri 03 Aug 2018 08:15:34 PM CST
************************************************************************/

#include<cstdio>
using namespace std;

int a[10001];
int n,m;

bool c(int d){
int sum = 0;
for(int i=0;i<n;++i){
sum+=a[i]/d;
}
return sum>=m;
}

int main(){
scanf("%d%d",&n,&m);
double e;
for(int i=0;i<n;++i){
scanf("%lf",&e);
a[i] = 100*e;
}
int ub = 1e9;
int lb = 0;
while(ub-lb>1){
int mid = (lb+ub)/2;
if(c(mid))lb = mid;
else ub = mid;
}
if(lb<1)printf("0.00n");
else
printf("%.2fn",(double)lb/100);
double eee = 14.5*0.01;
printf("%.2fn",eee);
return 0;
}