Problem: 2057B - Gorilla and the Exam
Language: c++20 

Code 1:
# include <bits/stdc++.h>
using namespace std;
# define no cout <<"NO" << endl
# define yes cout << "YES"<< endl
# define ll long long int
# define flp(i,k,n) for(ll i = k;i<n;i++)
# define rflp(i,k,n) for(ll i = k-1;i>=n;i--)
# define i(a) ll a;cin >> a;
# define ic(i) char i;cin >> i;
# define ia(a,n) ll a[n];for(ll i=0;i<n;i++)cin >> a[i];
# define ica(a,n) char a[n];for(ll i=0;i<n;i++)cin >> a[i];
# define is(s) string s;cin >> s;
# define mod 1000000007
# define dv 1000000000


// bool isPrime(int n)
// {
//     if (n <= 1)
//         return false;
 
//     for (int i = 2; i <= sqrt(n); i++)
//         if (n % i == 0)
//             return false;
 
//     return true;
// }



// void dfs(ll node,ll iter,int ind,vector<queue<pair<ll,ll>>>& v,set <ll> &s,ll &sum){
//     s.insert(node);
//     // cout << "node-->" << node <<"  iter-->" << iter<< endl;
//     ll w=0;
//     while(!v[node-1].empty()){
//         ll u=iter;
//         ll t1=v[node-1].front().first;
//         ll t2=v[node-1].front().second;
//         // cout << t1 << " " << t2 << endl;
//         if(s.find(t1)!=s.end()){
//             v[node-1].pop();
//             continue;
//         }
//         else{
//             if(t2<ind)u++;
//             sum=max(sum,u);
//             // cout << "iter-->"<< iter << " sum" << sum<< endl;
//             dfs(t1,u,t2,v,s,sum);
//         }
//         v[node-1].pop();    
//     }
// }


// bool comp(pair<ll,ll> p1 ,pair<ll,ll> p2){
//     if(p1.second==p2.second)return p1.first>p2.first;
//     else return p1.second < p2.second;
// }


void solve(){
    i(n);
    i(k);
    ia(arr,n);

    map <ll,ll> m;
    flp(i,0,n){
        m[arr[i]]++;
    }
     
    ll a[m.size()];
    int j=0;
    for(auto i:m){
        a[j++]=i.second;
    }
    sort(a,a+m.size());
    if(k==0){
            cout << m.size() << endl;
            return;
    }
    flp(i,0,m.size()){
        if(k<=0){
            cout << m.size()-i << endl;
            return;
        }
        else{
            k-=a[i];
        }
    } 
    cout << 1 << endl; 
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    ll t=1;
    cin >> t;
    while(t--)solve();
}

Code 2:
# include <bits/stdc++.h>
using namespace std;
# define no cout <<"NO" << endl
# define yes cout << "YES"<< endl
# define ll long long int
# define flp(i,k,n) for(ll i = k;i<n;i++)
# define rflp(i,k,n) for(ll i = k-1;i>=n;i--)
# define i(a) ll a;cin >> a;
# define ic(i) char i;cin >> i;
# define ia(a,n) ll a[n];for(ll i=0;i<n;i++)cin >> a[i];
# define ica(a,n) char a[n];for(ll i=0;i<n;i++)cin >> a[i];
# define is(s) string s;cin >> s;
# define mod 1000000007
# define dv 1000000000


// bool isPrime(int n)
// {
//     if (n <= 1)
//         return false;
 
//     for (int i = 2; i <= sqrt(n); i++)
//         if (n % i == 0)
//             return false;
 
//     return true;
// }



// void dfs(ll node,ll iter,int ind,vector<queue<pair<ll,ll>>>& v,set <ll> &s,ll &sum){
//     s.insert(node);
//     // cout << "node-->" << node <<"  iter-->" << iter<< endl;
//     ll w=0;
//     while(!v[node-1].empty()){
//         ll u=iter;
//         ll t1=v[node-1].front().first;
//         ll t2=v[node-1].front().second;
//         // cout << t1 << " " << t2 << endl;
//         if(s.find(t1)!=s.end()){
//             v[node-1].pop();
//             continue;
//         }
//         else{
//             if(t2<ind)u++;
//             sum=max(sum,u);
//             // cout << "iter-->"<< iter << " sum" << sum<< endl;
//             dfs(t1,u,t2,v,s,sum);
//         }
//         v[node-1].pop();    
//     }
// }


// bool comp(pair<ll,ll> p1 ,pair<ll,ll> p2){
//     if(p1.second==p2.second)return p1.first>p2.first;
//     else return p1.second < p2.second;
// }


void solve(){
    i(n);
    i(k);
    ia(arr,n);

    map <ll,ll> mp;
    flp(i,0,n){
        mp[arr[i]]++;
    }
    vector<int> v;
    for(auto i:mp){
        v.push_back(i.second);
    }
    int l = v.size();
    sort(v.begin(),v.end());
    if(k>=n){
        cout << 1 << endl;
        return;
    }
    else{
        flp(i,0,l){
            if(k-v[i]>=0){
                k-=v[i];
            }
            else{
                cout << l-i << endl;
                return;
            }
        }
    } 
    
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    ll t=1;
    cin >> t;
    while(t--)solve();
}

Answer: 2