zoukankan      html  css  js  c++  java
  • Round #204 div1 A/div 2 C :::: Jeff and Rounding

    题目的大意是给你2*n个浮点数,要求你选出n对浮点数,每一对浮点数其中一个数取上限,另一个数取下限,然后求2*n个处理后浮点数的和与处理前浮点数的和的差的绝对值。
    即min |(a1+a2+.....+an)-([ai1+aj1]+[ai2+aj2]+.....+[ain+ajn])|;
     
    解题思路:
      要注意的是 例如 2.0的上限和下限都是2.0;
      首先对每一个浮点数都取其下限,这样得到的差值就是所有浮点数小数部分的和;然后则需要从2*n个数里面选出n个数取其上限,即下限加1,而如果这个数是个整数,那么不需要加1;因此统计加1个数的上限和下限即可;然后选择min abs(小数部分的和-加1的个数);
    代码:
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;  //
    
    int n;
    double a,sum;
    int z,nz;   //z为小数部分为0的数的个数,nz为非零的个数
    double ans=10000000;
    
    int main()
    {
        cin>>n; sum=0.0; z=nz=0;
        for(int i=1;i<=2*n;i++) { scanf("%lf",&a);
        a=a-(int)a;
        sum+=a;
        if(a==0) z++;
        else nz++;
        }
        int sup,inf;
        if(nz<=z) { inf=0; sup=nz; }
        else { inf=n-z; sup=n; }
        for(int i=inf;i<=sup;i++) ans=min(ans,abs(i-sum));
        printf("%.3lf
    ",ans);
    }
  • 相关阅读:
    golang 带参数 发送、上传本地文件到其他机器、服务器
    【比赛游记】北大集训2020垫底记
    【比赛游记】NOIP2020又当工具人记
    AtCoder Regular Contest 107
    AtCoder Regular Contest 108
    【比赛游记】CSP2020游记
    注意事项
    2020北大集训摸鱼记
    NOIP2020游记
    ARC109F
  • 原文地址:https://www.cnblogs.com/au-xiaotian/p/3352531.html
Copyright © 2011-2022 走看看