问题描述
wld有n个数(a1,a2,...,an),他希望进行k次删除一个数的操作,使得最后剩下的n−k个数中有最多的不同的数,保证1≤n≤100,0≤k<n,1≤ai≤n(对于任意1≤i≤n)
输入描述
多组数据(最多100组) 对于每组数据: 第一行:一个数n表示数的个数 接下来一行:n个数,依次为a1,a2,…,an 接下来一行:一个数k表示操作数
输出描述
对于每组数据: 输出最多剩下的不同的数的个数
输入样例
4 1 3 1 2 1
输出样例
3
Hint
如果删去第一个1: 在[3,1,2]中有3个不同的数 如果删去3: 在[1,1,2]中有2个不同的数 如果删去第二个1: 在[1,3,2]中有3个不同的数 如果删去2: 在[1,3,1]中有1个不同的数
#include <iostream> #include <algorithm> using namespace std; struct node { int data; int count; }; int main() { int n; while(cin>>n) { int num[110],k,cnt=0,chong=0; node p[110]; for(int i=0;i<n;i++) { cin>>num[i]; p[i].count=0; } sort(num,num+n); cin>>k; p[0].data=num[0]; p[0].count=1; for(int i=1;i<n;i++) { if(num[i]==p[cnt].data) (p[cnt].count)++; else { chong=chong+p[cnt].count-1; cnt++; p[cnt].data=num[i]; p[cnt].count++; } } chong=chong+p[cnt].count-1; if(k<=chong) cout<<cnt+1<<endl; else cout<<(cnt+1)-(k-chong)<<endl; } return 0; }