poj 1064 二分

来源:互联网 发布:美国程序员平均工资 编辑:程序博客网 时间:2024/06/05 23:59
#include<iostream>using namespace std;int n,k;__int64 b[10010];int  f(__int64 a)                 //用int 64 就过了,题目中说的是100千米,超过int{int i,sum=0;if(a==0)sum=k;                         //这一步分母不能为0,这样处理else{for(i=0;i<n;i++)sum+=b[i]/a;}return sum;}int main(){double a[10010],mid1;int i;__int64 left,right,result,sum=0,mid;cin>>n>>k;for(i=0;i<n;i++)cin>>a[i];for(i=0;i<n;i++)b[i]=a[i]*100;for(i=0;i<n;i++)sum+=b[i];left=0;right=sum/k;while(left<=right){mid=(left+right)/2;if(f(mid)>=k){result=mid;left=mid+1;}elseright=mid-1;}mid1=result/100.0;printf("%.2lf\n",mid1);return 0;}

0 0
原创粉丝点击