20pts求助
查看原帖
20pts求助
724600
Submerge_TA楼主2023/7/15 21:02
#include <iostream>
using namespace std;

int n, k, k1, t;
int maxn = 0; // 当前的最大众数
int s = 0; // 符合要求的数量
int a[1000005] = {0}; // 统计每个元素出现的次数的数组
int b[1000005] = {0}; // 统计每个出现次数对应的元素数量的数组

int main()
{
    cin >> n >> k;
    k1 = k;

    for (int i = 1; i <= n; i++)
    {
        cin >> t;
        a[t]++;
    }

    for (int i = 1; i <= 1000000; i++)
    {
        b[a[i]]++;
    }

    for (int i = 1000000; i >= 1; i--)
    {
        if (k >= b[i])
        {
            k -= b[i];
            b[i - 1] += b[i];
        }
        else
        {
            maxn = i;
            break;
        }
    }

    if (k1 >= maxn)
    {
        cout << "pigStd" << endl;
        return 0;
    }

    for (int i = 1; i <= n; i++)
    {
        if (a[i] >= maxn || a[i] + k1 >= maxn)
        {
            s++;
        }
    }

    cout << s << endl;

    return 0;
}
2023/7/15 21:02
加载中...