问题描述
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; }