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

给予N*2个数字,改变其中的N个向上进位,N个向下进位,使最后得到得数与原来数的差的绝对值最小

 

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

Codeforces Round #204 (Div. 2) C. Jeff and Rounding——数学规律
#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

 

 

你可能感兴趣的:(codeforces)