Codeforces Round #570 (Div. 3) D. Candy Box (easy version)(思维)
https://codeforces.com/contest/1183/problem/D
题目大意:
给定n个糖果,每个糖果都有一种编号,我们希望装一盒中,每种糖果的数量是不一样的,
问我们这样的一盒最大总数量的是多少?
input
3
8
1 4 8 4 5 6 3 8
16
2 1 3 3 4 3 4 4 1 3 2 2 2 4 1 1
9
2 2 4 4 4 7 7 7 7
output
3
10
9
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=200200,M=2002;
LL mp[N];
bool cmp(LL l,LL r)
{
return l>r;
}
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
LL T=1;
cin>>T;
while(T--)
{
LL n;
cin>>n;
//mp重置
for(LL i=1;i<=n;i++)
mp[i]=0;
for(LL i=1;i<=n;i++)
{
LL x;
cin>>x;
mp[x]++;
}
sort(mp+1,mp+1+n,cmp);
LL sum=mp[1],maxn=mp[1];
for(LL i=2;i<=n;i++)
{
if(mp[i]==0||maxn==0) break;
else if(mp[i]<maxn)
{
maxn=mp[i];
sum+=mp[i];
}
else
{
maxn--;
sum+=maxn;
}
}
cout<<sum<<endl;
}
return 0;
}