題目鏈接: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]);
}
}