题目链接https://www.nowcoder.com/acm/contest/142/G
题意求n个数中删去m个数能得到的最大众数,若无则输出-1
思路:枚举最大众数的值,看是否能得到该结果。
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
using namespace std;
#define maxn 1e6
int a[100005];
int main()
{
ios::sync_with_stdio(false);
int t;
int n,m;
cin>>t;
while(t--)
{
map<int,int>mp;//存每个数字的个数
cin>>n>>m;
int mmax=0;
vector<int>vv;
for(int i=0; i<n; i++)
{
cin>>a[i];
if(!mp[a[i]])
vv.push_back(a[i]);
mp[a[i]]++;
mmax=max(a[i],mmax);
}
sort(vv.begin(),vv.end());
int flag=-1;
for(int i=vv.size()-1; i>=0; i--)
{
int t=m;
int k=i-1;
while(k>=0&&t>=0)
{
if(mp[vv[k]]>=mp[vv[i]])
t-=mp[vv[k]]-mp[vv[i]]+1;
k--;
}
if(t<0)
continue;
k=i+1;
while(k<vv.size()&&t>=0)
{
if(mp[vv[k]]>=mp[vv[i]])
t-=mp[vv[k]]-mp[vv[i]]+1;
k++;
}
if(t<0)
continue;
flag=vv[i];
break;
}
cout<<flag<<endl;
}
return 0;
}