T1 删除

题目

【题目描述】

现在,我的手上有 n 个数字,分别是 a1,a2,a3,...,an。 我现在需要删除其中的 k 个数字。当然我不希望随随便便删除,我希望删除 k 数字之后,剩下的 n−k 个数中有最多的不同的数。

【输入格式】

第一行两个正整数 n 和 k,含义如题目描述。 接下来一行,有 n 个非负整数,分别是 a1 到 an。

【输出格式】

一共一行,一个整数ans,表示删除了 k 个数字后最多的不同的数的个数。

【输入样例】

41

1312

【输出样例】

3

【数据规模】

对于 30% 的数据,n≤10,ai ≤10。

对于 60% 的数据,n≤100,ai ≤100。

对于 80% 的数据,n≤10^5,ai ≤10^5。

对于 100% 的数据,n≤10^5,ai ≤10^9。

解析

先排序,后去重,

然后,然后就没有然后了。

Code

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 100005;
int n, m, k, i, j, a[MAXN];
inline int get()
{
    char c;
    while (((c = getchar()) < 48 || c > 57) && c != '-');
    if (c == '-')
    {
        int res = 0;
        while ((c = getchar()) >= 48 && c <= 57)
        res = res * 10 + c - '0';
        return -res;
    }
    else{
        int res = c - '0';
        while ((c = getchar()) >= 48 && c <= 57)
        res = res * 10 + c - '0';
        return res;
    }
}
int main()
{
    //freopen("del.in", "r", stdin);
    //freopen("del.out", "w", stdout);
    cin >> n >> k;
    for(i = 1; i <= n; i ++)
        a[i] = get();
    sort(a + 1, a + 1 + n);
    m = unique(a + 1, a + 1 + n) - 1 - a;
    k -= (n - m);
    if (k <= 0) cout << m;
    else cout << m - k;
    //fclose(stdin); 
        //fclose(stdout);
}
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2022-02-22
  • 2021-06-26
  • 2021-12-15
  • 2021-10-01
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案