【題目】ios
A. Electionside
【描述】spa
Awruk和Elodreip參加選舉,n我的投票,每一個人有k張票,第i我的投a[i]張票給Elodreip,投k-a[i]張票給Awruk。求最小的k,使得Awruk比Elodreip得票多。code
數據範圍:1<=n<=100,1<=a[i]<=100blog
【思路】ip
Awruk得票數爲n*k-(a[1]+...+a[n]),Elodreip得票數爲a[1]+...+a[n]。n*k-(a[1]+...+a[n])>a[1]+...+a[n]推出n*k-(a[1]+...+a[n])>=a[1]+...+a[n]+1推出k>=(2*(a[1]+...+a[n])+1)/n,注意要上取整。get
注意:每一個人的總票數k要很多於每一個人投給Elodreip的票數,即k>=max{a[i]}。string
【個人實現】it
複雜度:O(n)io
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 6 using namespace std; 7 8 int main() 9 { 10 int n, k; 11 int x; 12 int sum = 0; 13 int Max_x; 14 scanf("%d", &n); 15 for(int i = 1; i <= n; i++) 16 { 17 scanf("%d", &x); 18 sum += x; 19 if(i == 1) 20 Max_x = x; 21 else 22 Max_x = max(Max_x, x); 23 } 24 k = (2 * sum + 1) / n; 25 if((2*sum+1)%n) 26 k++; 27 k = max(k, Max_x); 28 printf("%d\n", k); 29 return 0; 30 }
【評測結果】