https://vjudge.net/problem/CodeForces-1335C
题目大意:给出
n
n
n个人的技巧等级,从中选取一些人分成两个组,第一个组的技巧等级均不相同,第二个组的技巧等级均相同,求最大的分组的大小。
思路:统计不相等技巧个数和出现次数最多的技巧的出现次数。只有两种情况,取最大值就好了。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pr pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
int t,n;
int a[maxn],cnt[maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int ct1=0,ct2=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
++cnt[a[i]];
if(cnt[a[i]]==1)
++ct1;
if(cnt[a[i]]>ct2)
ct2=cnt[a[i]];
}
int ans1=min(ct1,ct2-1);
int ans2=min(ct1-1,ct2);
printf("%d\n",max(ans1,ans2));
memset(cnt,0,sizeof(int)*(n+1));
}
return 0;
}