题目描述
zcc有n个数(a1,a2,...,an),他希望进行k次删除一个数的操作,使得最后剩下的n−k
个数中有最多的不同的数,保证1≤n≤100,0≤k<n,0≤ai≤n.(对于任意1≤i≤n)
输入
多组数据(最多100组)
对于每组数据:
第一行:一个数n
表示数的个数
接下来一行:n
个数,依次为a1,a2,…,an
接下来一行:一个数k
表示操作数
输出
对于每组数据:
输出最多剩下的不同的数的个数
样例输入
4
1 3 1 2
1
#include <stdio.h>
int k[105]; //用于记录各个元素有几个
int main()
{
int n,i,l,he,sum,p;
while(~scanf("%d",&n)){
he=0,sum=0; //he表示重复个数的总数和,sum为有几个不同数
for(i=0;i<=n;i++) k[i]=0;//初始化0
for(i=0;i<n;i++) scanf("%d",&l),k[l]++; //记录各个数字有几个
for(i=0;i<=n;i++){
if(k[i]>1) he=he+k[i]-1,k[i]=1;//如果有重复,把多重复的数个数提取到he,保留一个
}
for(i=0;i<=n;i++){
if(k[i]==1) sum++; //有几个不同的数
}
scanf("%d",&p);//删除的个数
if(p<=he){ //如果要删除的数小于等于he,那我们只用把多重复数减掉,肯定能剩下sum
printf("%d\n",sum);
}else{
printf("%d\n",sum-(p-he));//先用光多重复的数,不够再启用sum
}
}
return 0;
}