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;
}
posted @ 2022-10-07 12:07  Vijurria  阅读(20)  评论(0编辑  收藏  举报