Codeforces Round #204 (Div. 2): C

这个题是个数学题;

2n个数,要求n个向上取整,n个向下取整,然后要求最后的数列之和与初始数列之和的差异最小;

差异di=(1-ai)-(bi-0);

容易看出ai与bi 的符号相同,故可以一次性将他们全部处理掉;

最后用一个整数减去上面一步得到的数;得到的最小值就是我们所需要的;

代码:

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 using namespace std;
 5 int n,cnt;
 6 double x,ans;
 7 int main()
 8 {
 9     scanf("%d",&n);
10     double res=99999999;
11     for(int i=0; i<2*n; i++)
12     {
13         scanf("%lf",&x);
14         double y=x-floor(x);
15         if(y>0)ans+=y;
16         else cnt++;
17     }
18     for(int i=n-cnt;i<=min(n,2*n-cnt);i++)
19         res=min(res,fabs(i-ans));
20     printf("%.3lf\n",res);
21     return 0;
22 }
View Code

 

posted @ 2013-10-13 16:15  Yours1103  阅读(135)  评论(0编辑  收藏  举报