问题描述
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;
}
浙公网安备 33010602011771号