码迷,mamicode.com
首页 > 其他好文 > 详细

Delete HDU5210 (模拟贪心)

时间:2015-04-28 09:51:18      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:

Delete
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 207 Accepted Submission(s): 140


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).


Output
For each case:

Print one integer. It denotes the maximum of different numbers remain after the deletion.


Sample Input

4
1 3 1 2
1



Sample Output

3

Hint
if 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

BestCoder Round #39 ($)

1001 Delete
用一个cnt数组记下每个数在a序列中出现了几次
在删数的时候贪心,尽可能删那些出现次数>1的数
这样就可以使最后有最多不同的数


#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<stack>
#include<queue>
#include<string>
#include<cstdlib>
#include<cmath>
//#include<bits/stdc++.h>
using namespace std;
template<class T>inline T read(T&x)
{
    char c;
    while((c=getchar())<=32)if(c==EOF)return 0;
    bool ok=false;
    if(c=='-')ok=true,c=getchar();
    for(x=0; c>32; c=getchar())
        x=x*10+c-'0';
    if(ok)x=-x;
    return 1;
}
template<class T> inline T read_(T&x,T&y)
{
    return read(x)&&read(y);
}
template<class T> inline T read__(T&x,T&y,T&z)
{
    return read(x)&&read(y)&&read(z);
}
template<class T> inline void write(T x)
{
    if(x<0)putchar('-'),x=-x;
    if(x<10)putchar(x+'0');
    else write(x/10),putchar(x%10+'0');
}
template<class T>inline void writeln(T x)
{
    write(x);
    putchar('\n');
}
//-------ZCC IO template------
const int maxn=500;
const double inf=999999999;
#define lson (rt<<1),L,M
#define rson (rt<<1|1),M+1,R
#define M ((L+R)>>1)
#define For(i,t,n) for(int i=(t);i<(n);i++)
typedef long long  LL;
typedef double DB;
typedef pair<int,int> P;
#define bug printf("---\n");
#define mod  100007

int a[maxn];
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int n,m;
    while(read(n))
    {
        memset(a,0,sizeof(a));
        int maxv=0;
        For(i,0,n)
        {
            int tmp;
            read(tmp);
            a[tmp]++;
            maxv=max(maxv,tmp);
        }
        int k;
        read(k);
        sort(a,a+101,cmp);
        int i=0;
        while(a[i])i++;

        int sum=0;
        For(j,0,i)sum+=a[j];
        sum-=i;
        k-=sum;
        if(k<=0)writeln(i);
        else writeln(i-k<0?0:i-k);

    }
    return 0;
}


Delete HDU5210 (模拟贪心)

标签:

原文地址:http://blog.csdn.net/u013167299/article/details/45317427

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!