CF-1186D-Vus the Cossack and Numbers(規律)

題目鏈接:https://codeforces.com/problemset/problem/1186/D

題目大意:給出一個double類型的數組A。看是否存在一個數組B滿足B[i]=floor(A[i])||ceil(A[i])。\sum B[i] =0

思路:因爲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]);
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章