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;
}
View Code

相关文章: