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 |
Re:回去查了下不同版本的g++的浮点处理不一样,不知道是不是这个原因In Reply To:这题有bug吧,过去ac的程序现在也不行 Posted by:ixor at 2013-04-03 19:44:16 > 用了ac的代码试了下,也不行,蛋都碎了!!! > > 我已经神经质地把所有int8换成int64了,下面代码如有bug,求狠拍! > --------------------------------------- > > > #include <stdio.h> > #include <algorithm> > > using namespace std; > > void sum_up(long long *ary, long long len, long long *sum) > { > sum[0] = ary[0]; > for(long long i = 0; i < len; i ++) > sum[i + 1] = sum[i] + ary[i + 1]; > } > > bool validate(long long *ary, long long *sum, long long ary_len, long long frag_cnt, long long len) > { > if(frag_cnt <= 0) > return true; > > if(ary_len == 0 && frag_cnt != 0) > return false; > > if(sum[ary_len - 1] < frag_cnt * len) > return false; > > long long consume = ary[ary_len - 1] / len; > > if(consume == 0) > return false; > > return validate(ary, sum, ary_len - 1, frag_cnt - consume, len); > } > > > long long bin(long long *ary, long long *sum, long long ary_len, long long frag_cnt, long long begin, long long end) > { > if(end == begin) > return begin; > > if(end - begin == 1) > { > if(validate(ary, sum, ary_len, frag_cnt, end)) > return end; > return begin; > } > > long long middle = (begin + end) / 2; > > if(validate(ary, sum, ary_len, frag_cnt, middle)) > return bin(ary, sum, ary_len, frag_cnt, middle, end); > else > return bin(ary, sum, ary_len, frag_cnt, begin, middle); > } > > void calc(long long *ary, long long *sum, long long ary_len, long long frag_cnt) > { > > if(!validate(ary, sum, ary_len, frag_cnt, 1)) > { > printf("0.00\n"); > return; > } > > long long max = sum[ary_len - 1] / frag_cnt; > max = max > ary[ary_len - 1] ? ary[ary_len - 1] : max; > > long long result = bin(ary, sum, ary_len, frag_cnt, 1, max); > > double f = result / 100.0f; > printf("%.2lf\n", f); > } > > int main(void) > { > long long n, k; > long long cables[10002]; > long long sum[10002]; > > while(scanf("%lld %lld", &n, &k) != EOF) > { > double temp; > for(long long i = 0; i < n; i ++) > { > scanf("%lf", &temp); > cables[i] = (long long)((temp + 0.005) * 100); > } > sort(cables, cables + n); > > sum_up(cables, n, sum); > > calc(cables, sum, n, k); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator