# Greedy# Arithmetic# Input/Output

b914 - 神奇寶貝1.聯盟賽

🔗 前往 ZeroJudge 原題

題目描述

題目描述了神奇寶貝聯盟賽集數的決定方式。集數由高層投票內容的總和除以高層人數後四捨五入得到。程式需要讀取高層人數 n,以及每位高層的投票內容 m,計算並輸出聯盟賽的集數。

解題思路

題目要求計算平均數並進行四捨五入。程式首先讀取高層人數 n,然後迴圈讀取每位高層的投票內容 m 並計算總和 sum。接著,計算平均數 st = sum / t (其中 t 等於 n)。最後,使用一個條件判斷式來判斷是否需要向上取整。如果 (st * t * 2) + t <= sum << 1,則表示平均數需要向上取整,輸出 sum / t + 1;否則,輸出 sum / t。使用位移運算符 << 1 等同於乘以 2,可以避免使用浮點數。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	int n,x;
	while(cin >> n){
		int sum(0),t=n,st;
		if(n==0)
			cout << "0\n";
		else{
			while(n--){
				cin >> x;
				sum+=x;
			}
			st=sum/t;
			(st*t*2)+t<=sum<<1?cout << sum/t+1 << '\n':cout << sum/t << '\n'; 
		}
	}
}

Discussion