把每个值的各种贡献算一下即可
/* ai的小数部分为xi,向下取整对答案贡献为xi 向上取整对答案的贡献是xi-1,如果这个数是0,那么对答案的贡献是xi,即如果0向上取整就可以免去-1 然后sum{xi}-1*k来凑最小的绝对值即可 */ #include<bits/stdc++.h> using namespace std; #define N 4005 int n; double x[N]; int main(){ cin>>n; for(int i=1;i<=2*n;i++)cin>>x[i],x[i]-=(int)x[i]; double sum=0; int cnt=0,cnt1=0; for(int i=1;i<=2*n;i++){ sum+=x[i]; if(x[i]==0)cnt++; else cnt1++; } sum-=min(n,cnt1); double ans=fabs(sum); for(int i=1;i<=cnt;i++) ans=min(ans,fabs(sum+i)); printf("%.3lf\n",ans); }
原文:https://www.cnblogs.com/zsben991126/p/11439790.html