题目链接:https://codeforces.com/problemset/problem/1186/D
题目大意:给出一个double类型的数组A。看是否存在一个数组B满足B[i]=floor(A[i])||ceil(A[i])。
思路:因为B[i]的取值只相差1,所以我们一开始将所有值都按floor确定,sum大的话B[i]取小的,小的话取大的。
ACCode:
double A[MAXN];
int B[MAXN];
int n;
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;++i){
scanf("%lf",&A[i]);
}
ll sum=0;
for(int i=1;i<=n;++i){
B[i]=floor(A[i]);
sum+=1ll*B[i];
}
for(int i=1;i<=n;++i){
int tmp=ceil(A[i]);
if(sum>0&&tmp<B[i]){
sum+=tmp-B[i];
B[i]=tmp;
}
else if(sum<0&&tmp>B[i]){
sum+=tmp-B[i];
B[i]=tmp;
}
}
for(int i=1;i<=n;++i) printf("%d\n",B[i]);
}
}