• 消失的数字


    A 消失的数字
    文件名 输入文件 输出文件 时间限制 空间限制
    del.cpp/c/pas del.in del.out 1s 512MB
    题目描述
    现在,我的手上有 n 个数字,分别是 a 1 ,a 2 ,a 3 ,...,a n 。
    我现在需要删除其中的 k 个数字。当然我不希望随随便便删除,我希望删除 k
    个数字之后,剩下的 n − k 个数中有最多的不同的数。
    输入格式
    第一行两个正整数 n 和 k,含义如题目描述。
    接下来一行,有 n 个非负整数,分别是 a 1 到 a n 。
    输出格式
    一共一行,一个整数 ans,表示删除了 k 个数字后最多的不同的数的个数。
    样例输入
    4 1
    1 3 1 2
    样例输出
    3
    样例解释
    如果删去第一个 1:
    在[3,1,2]中有 3 个不同的数
    如果删去 3:
    在[1,1,2]中有 2 个不同的数
    如果删去第二个 1:
    在[1,3,2]中有 3 个不同的数
    2
    如果删去 2:
    在[1,3,1]中有 1 个不同的数
    数据范围
    对于 30% 的数据,n ≤ 10,a i ≤ 10。
    对于 60% 的数据,n ≤ 100,a i ≤ 100。
    对于 80% 的数据,n ≤ 10 5 ,a i ≤ 10 5 。
    对于 100% 的数据,n ≤ 10 5 ,a i ≤ 10 9 。

    木问题;

    #include<iostream>
    #include<queue>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int n,k;
    int a[100009];
    int ans,sum;
    int main()
    {
        freopen("del.in","r",stdin);
        freopen("del.out","w",stdout);
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        sort(a+1,a+1+n);
        if(n==k)
        {
            cout<<0;
            return 0;
        } 
        sum=1;
        for(int i=2;i<=n+1;i++)
        {
            if(a[i]==a[i-1])
            {
                sum++;
                continue;
            }else
            {        
                k-=(sum-1);
                ans++;        
                sum=1;    
            }
        }
        if(k>0)    
            ans-=k;    
        cout<<ans<<endl;
        return 0;
    } 
  • 相关阅读:
    日历
    复数的运算
    大数的计算
    poj 1562
    POJ 1002
    利用正则表达式检测违禁字
    js实现一个闹钟
    jQuery实现五星好评
    jquery实现计算器功能
    横向轮播图
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7727610.html
Copyright © 2020-2023  润新知