注:最近这一系列ACM的内容,都是2年多之前的代码,自己回顾一下。
Description
投票者被分成K个组,如果超过半数的组投赞成票,决议就可以通过。 每组是投赞成票还是反对票也由每组内部投票决定,若这一组有超过半数 的人投赞成票,那么这一组就投赞成票。 例如有3组,分别有5,5,7人,那么,至少要有6个人赞成决议才能通过。 (即第一组和第二组各三人。) 注意到共有17人,只需要6人赞成就有可能通过,所以本题题目叫《危险的民主》
编写程序,告诉你组数和每组的人数,计算通过决议至少需要多少人赞成。
Input
第一行是正整数K(K<=101),表示有k组
第二行有K个数,分别是每一组的人数。
K以及每组的人数都是奇数。总人数不会超过10001。
Output
至少需要的人数
Sample Input
3
5 7 5
Sample Output
6
Source
投票者被分成K个组,如果超过半数的组投赞成票,决议就可以通过。 每组是投赞成票还是反对票也由每组内部投票决定,若这一组有超过半数 的人投赞成票,那么这一组就投赞成票。 例如有3组,分别有5,5,7人,那么,至少要有6个人赞成决议才能通过。 (即第一组和第二组各三人。) 注意到共有17人,只需要6人赞成就有可能通过,所以本题题目叫《危险的民主》
编写程序,告诉你组数和每组的人数,计算通过决议至少需要多少人赞成。
Input
第一行是正整数K(K<=101),表示有k组
第二行有K个数,分别是每一组的人数。
K以及每组的人数都是奇数。总人数不会超过10001。
Output
至少需要的人数
Sample Input
3
5 7 5
Sample Output
6
Source
对人数较少的那一半的组,求其半数之和。
#include <iostream>
using namespace std;
int cmp(const void *a, const void *b)
{ return *((int*)a) > *((int*)b); }
int main()
{
int K;
int num[110];
int sum = 0;
cin >> K;
for (int i = 0; i < K; i++)
cin >> num[i];
qsort(num, K, sizeof(int), cmp);
K = K/2 + 1;
for (int i = 0; i < K; i++)
sum = sum + num[i]/2 + 1;
printf("%d\n", sum);
// system("pause");
return 0;
}