本文共 988 字,大约阅读时间需要 3 分钟。
给出2*n个数,n个向上取整,n个向下取整,求新的数的和与原始的数的和的最小差距。
#include#include #include #include #include #include #include #define MAX 5007#define eps 1e-6using namespace std;typedef long long LL;int n;double a[MAX];bool check ( double x ){ if ( fabs(x) < eps ) return true; else return false;}int main ( ){ while ( ~scanf ( "%d" , &n ) ) { for ( int i = 1; i <= n ; i++ ) { scanf ( "%lf" , &a[2*i-1] ); scanf ( "%lf" , &a[2*i] ); } int num = 0; double sum = 0; for ( int i = 1 ; i <= 2*n ; i++ ) { a[i] -= floor ( a[i] ); if ( check ( a[i] ) ) num++; sum += a[i]; } double ans = 1e11; for ( int i = max(0,num-n) ; i <= min ( num , n ) ; i++ ) ans = min ( ans , fabs ( sum-(n-i) ) ); cout < < << ans << endl; }}
转载地址:http://kqvjn.baihongyu.com/