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 }