HDU 2535 Vote【水題】

1423 ワード

Vote
Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3972    Accepted Submission(s): 2190
Problem Description
アメリカの大統領選挙は各州の投票結果によって最終的な結果を確定し、半分以上の州の支持を得れば当選することができ、各州の投票結果はまたその州の有権者の投票によって生じ、ある州の半分以上の有権者がヒラリーを支持すれば、彼女はその州の支持を勝ち取ることになる.今、州ごとの有権者の数を示していますが、ヒラリー氏は少なくともどのくらいの有権者の支持を得て当選する必要がありますか?
Input
複数組の入力データ
各データ群の最初の行には、米国の州数を表す整数N(1<=N<=101)が含まれ、N=0は入力終了を示す
次の行はN個の正の整数を含んで、それぞれ各州の有権者数を表して、各州の有権者数は100を超えません
Output
各グループのデータ出力1行について、ヒラリー氏が少なくとも支持を得る必要があると表明した有権者数
 
Sample Input
3
5 7 5
0
 
Sample Output
6
 
Source
The 6th UESTC Programming Contest
あなたにN州の各州の有権者数をあげて、半分以上の州の有権者数が半分を超えてこそ大統領に当選することができます.
質問:最低必要な有権者数はいくらですか.
考え方:まず有権者数によって少なくから多く順位をつけて、半分以上の州は前N/2+1の州で、前N/2+1の州はすべての州です
最も少ない有権者数はdi/2+1(i州の有権者数はdi).有権者数を集計し、結果を出力する.
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

int A[110];
int main()
{
    int N;
    while(cin >> N && N)
    {
        for(int i = 0; i < N; ++i)
            cin >> A[i];
        sort(A,A+N);
        int sum = 0;
        for(int i = 0; i < (N>>1)+1; ++i)
            sum += (A[i]>>1)+1;
        cout << sum << endl;
    }

    return 0;
}