返回顶部

Good Sequence

2022寒假第一篇!

#include <bits/stdc++.h>
using namespace std;
long long a[1000001];
int main()
{
    int n,temp,ans=0;
    cin >> n;
    for (int i=1;i<=n;i++){
        cin>>temp;
        if (temp>n) ans++; // 因为此时一定不够
        else a[temp]++;
    }
    for (int i=1;i<=n;i++){ // 分类讨论
        if (a[i]==0) continue; // 未出现过
        if (a[i]<i) ans+=a[i]; // 全部换了
        else if (a[i]>i) ans+=a[i]-i; // 换了多余的
    }
    cout<<ans;
    // system("pause");
    return 0;
}

用桶排可以很方便的解决。

说明一下过程中遇到的困惑:

为什么要if (temp>n) ans++;

因为如果有3个数,而你输入的是4,怎么也没办法凑到4个4,直接排除。

posted @ 2022-01-20 21:14  zrc4889  阅读(29)  评论(0编辑  收藏  举报