Vus the Cossack has ai rounded up or down. It is not necessary to round to the nearest integer.
For example, if [4,2,−2,−4].
Note that if ai.
Help Vus the Cossack find such sequence!
Input
The first line contains one integer 1≤n≤105) — the number of numbers.
Each of the next 0.
Output
In each of the next |ai−bi|<1 must be met.
If there are multiple answers, print any.
Examples
input
Copy
4 4.58413 1.22491 -2.10517 -3.70387
output
Copy
4 2 -2 -4
input
Copy
5 -6.32509 3.30066 -0.93878 2.00000 1.96321
output
Copy
-6 3 -1 2 2
Note
The first example is explained in the legend.
In the second example, we can round the first and fifth numbers up, and the second and third numbers down. We can round the fourth number neither up, nor down.
题意:原来的浮点型数组之和为0,现在让你进行向上或者向下取整,使得变化后的数组之和也是0
思路:把浮点型数组进行一种取整方式,然后把小数部分保留一下,看最后的小数部分的进行四舍五入后的结果,然后根据最后小数部分的和进行不断地进行改变取整方式就可以了
代码:
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<cmath> const int maxn=1e5+5; typedef long long ll; using namespace std; double a[maxn]; int b[maxn]; int main() { int n; cin>>n; double s=0; for(int t=0;t<n;t++) { scanf("%lf",&a[t]); b[t]=a[t]; s+=(a[t]-b[t]); } int ss=round(s); if(ss>0) { for(int t=0;t<n;t++) { if(ss==0) { break; } if(a[t]>b[t]) { b[t]++; ss--; } } } if(ss<0) { for(int t=0;t<n;t++) { if(ss==0) { break; } if(a[t]<b[t]) { b[t]--; ss++; } } } for(int t=0;t<n;t++) { cout<<b[t]<<endl; } return 0; }