您的位置:首页 > 其它

Codeforces Round #204 (Div. 2) C. Jeff and Rounding——数学规律

2013-10-10 16:02 633 查看
给予N*2个数字,改变其中的N个向上进位,N个向下进位,使最后得到得数与原来数的差的绝对值最小

考虑小数点后面的数字,如果这些数都非零,则就是 abs(原数小数部分相加-1*n), 多一个0 则 min( abs(原数小数部分相加-1*n) ,abs(原数小数部分相加-1*(n-1)) )以此类推

#include<stdio.h>
int abs(int a){
if(a<0)return -a;
else return a;
}

int Min(int a,int b){
if(a<b)return a;
else return b;
}

int main(){
int n,i;
while(scanf("%d",&n)!=EOF){
int n2=n*2;
int ret=9999999,temp,all=0,k=0;
for(i=1;i<=n2;i++){
scanf("%*d.%d",&temp);
all+=temp;
if(temp==0)k++;
}
for(i=0;i<=k;i++){
ret=Min(ret,abs(all-(1000*n-1000*i)));
}
printf("%d.%03d\n",ret/1000,ret%1000);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: