统计人数
发布时间: 2015年12月14日 15:36 最后更新: 2015年12月14日 17:59 时间限制: 1000ms 内存限制: 32M
HS想要统计镇上总共有多少人,但是他并不想一个一个的去数有多少个人,他想了一个其他的方法,他在镇上找了N个人,然后问每一个人“你知道 除你之外 镇上和你姓氏相同的人有多少个吗?”,现在HS想要知道,镇上最少有多少人?我们保证HS不会问同一个人两次。
第一行一个正整数T(T <= 100),表示T组测试样例; 每组样例有两行, 第一行一个正整数N(N <= 50),表示被问到的人数, 第二行N个数(在0 ~ 1000000之间),表示每个人的回答。
每行输出一个正整数,表示镇上最少人数。
复制
2 4 1 1 2 2 1 0
Case 1: 5 Case 2: 1
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int T, N;
int cc = 0;
long long num[55];
scanf("%d", &T);
while (T--) {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%lld", &num[i]);
}
sort(num, num + N);
int cou = 0;
long long sum = 0, tem = num[0];
for (int i = 0; i < N; i++) {
if (num[i] == tem) {
cou++;
if (cou % (tem + 1) == 0) {
sum += (tem + 1);
cou = 0;
}
}
else {
if (cou != 0 && cou < tem + 1) {
sum += (tem + 1);
}
cou = 1;
tem = num[i];
}
}
if (cou != 0) {
sum += (tem + 1);
}
printf("Case %d: %lld\n", ++cc, sum);
}
return 0;
}