| ||||||||||
| 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