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,直接排除。