Delete
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 56 Accepted Submission(s): 41
Problem Description
WLD likes playing with numbers. One day he is playing with
N
integers. He wants to delete
K
integers from them. He likes diversity, so he wants to keep the kinds of different integers as many as possible after the deletion. But he is busy pushing, can you help him?
Input
There are Multiple Cases. (At MOST
100
)
For each case:
The first line contains one integer N(0<N≤100) .
The second line contains N integers a1,a2,...,aN(1≤ai≤N) , denoting the integers WLD plays with.
The third line contains one integer K(0≤K<N) .
For each case:
The first line contains one integer N(0<N≤100) .
The second line contains N integers a1,a2,...,aN(1≤ai≤N) , denoting the integers WLD plays with.
The third line contains one integer K(0≤K<N) .
Output
For each case:
Print one integer. It denotes the maximum of different numbers remain after the deletion.
Print one integer. It denotes the maximum of different numbers remain after the deletion.
Sample Input
4 1 3 1 2 1
Sample Output
3Hintif WLD deletes a 3, the numbers remain is [1,1,2],he'll get 2 different numbers. if WLD deletes a 2, the numbers remain is [1,1,3],he'll get 2 different numbers. if WLD deletes a 1, the numbers remain is [1,2,3],he'll get 3 different numbers.
Source
用set先放所有的不重复的,如果k小于等于n-是s.size()就输出s.size(),否则就输出s.size()-(n-k)
代码:
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;
set<int > s;
int main(){
int n;
while(scanf("%d", &n) == 1){
s.clear();
int a;
for(int i = 0;i < n; ++ i){
scanf("%d", &a);
s.insert(a);
}
int k;
scanf("%d", &k);
int temp = n - s.size();
if(k <= temp){
cout << s.size()<<endl;
}
else{
cout << (s.size()-(k-temp))<<endl;
}
}
return 0;
}