2015-05-03 16:16:11
总结:这场... 前面两题挺快,卡第三题了TAT。
A题 hdu 5210:贪心题。
删k个数字,使得最后剩下的不同的数尽可能多。
水题... 多扫几遍乱搞下就行。
#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <map> #include <set> #include <stack> #include <queue> #include <string> #include <iostream> #include <algorithm> using namespace std; #define MEM(a,b) memset(a,b,sizeof(a)) #define REP(i,n) for(int i=0;i<(n);++i) #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define getmid(l,r) ((l) + ((r) - (l)) / 2) #define MP(a,b) make_pair(a,b) #define PB(a) push_back(a) typedef long long ll; typedef pair<int,int> pii; const double eps = 1e-8; const int INF = (1 << 30) - 1; int n; int v[105]; int main(){ while(scanf("%d",&n) != EOF){ MEM(v,0); for(int i = 1; i <= n; ++i){ int a; scanf("%d",&a); v[a]++; } int k; scanf("%d",&k); for(int i = 1; i <= n; ++i){ while(k && v[i] > 1){ v[i]--; k--; } if(k == 0) break; } for(int i = 1; i <= n; ++i) if(v[i]){ if(k > 0){ v[i]--; k--; } if(k == 0) break; } int cnt = 0; for(int i = 1; i <= n; ++i) if(v[i]) cnt++; printf("%d\n",cnt); } return 0; }