Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
数据加强了,错了In Reply To:哥用double过了。。。 Posted by:guoyiwei111 at 2011-06-03 20:11:48 > //注意: 因为是用二分,所以left应该在标准值左边,可能会出现 x.999999这种情况 ,而right 就不会了。 > #include <cstdio> > #include <cstring> > #include <cmath> > #include <algorithm> > const double limit = 1e-5; > using namespace std; > double all[10001]; > bool num(double M,int N,int K){ > int res=0; > for(int i=0;i<N;i++){ > res+=(all[i]/M); > if(res>=K) > return true; > } > return false; > } > int main(){ > //freopen("E:\\Desktop\\in.txt","r",stdin); > int N,K; > while(scanf("%d%d",&N,&K)!=EOF){ > double left,right,mid; > > double max_len=0; > double tmp; > for(int i=0;i<N;i++){ > scanf("%lf",&all[i]); > max_len=max(max_len,all[i]); > } > right=max_len; > left=0;//配合最后的-1 为了处理为0.00 的情况 > while(right-left>limit){ > mid=(left+right)/2; > if(num(mid,N,K)){ > left=mid; > } > else{ > right=mid; > } > } > if((int)(right*1000)%10>=5) right-=0.005;//因为要用浮点数输出 所以 如果是 0.005 的话会输出0.01!!!!!!一定要注意 > printf("%.2lf\n",(double)right); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator