。。。
首先mid定义为int型。。
再者r的初值取了最小值导致二分范围太小
还有这题卡精度
by 派大那个星 @ 2019-01-17 16:12:06
```#include<bits/stdc++.h>
using namespace std;
int n,k;
char s[105];
double a[10010],sum;
bool check(double c){
int b=0;
for(int i=1;i<=n;i++){
b+=int(a[i]/c);
}
if(b<k){
return false;
}
return true;
}
int main()
{
double l=0,r=1147483.00;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%lf",&a[i]);
sum+=a[i];
}
r=sum;
double mid;
while(r-l>0.0001){
mid=(l+r)/2.0;
if(!check(mid)){
r=mid;
}
else l=mid;
}
sprintf(s,"%.3f",l);
for(int i=0;i<strlen(s);++i){
if(i==strlen(s)-1)break;
printf("%c",s[i]);
}
}```
by 派大那个星 @ 2019-01-17 16:12:26
*上100就行了
by K0stlin @ 2019-01-17 16:12:38
@[派大那个星](/space/show?uid=86874) 谢谢
by Yoo_ @ 2019-01-17 18:20:13
@[27__tmi](/space/show?uid=114830) 谢谢
by Yoo_ @ 2019-01-17 18:20:19