• 东北育才 d1t1 优雅的序列


    优雅的序列

    grace.cpp

    题目描述

    设一个含有n个数的序列的优雅度为满足ai<ai+1(1≤i<n)的i的个数。现在给出一个含有n个数的序列,小X想要将这n个数调整顺序,使得新序列的优雅度最大。同样喜欢优雅的你,能否求出这个最大的优雅度呢?

    输入格式:

    第1行:一个整数n

    第2行:n个整数,表示原始序列

    输出格式:

    输出1个整数,为新序列的最大优雅度

    样例输入

    样例输出

    5

    1 3 2 4 1

    3

    样例解释

    排列方式不唯一,一种可行的排列方式为1、2、1、3、4,优雅度为3。可以通过穷举法证明这是最优方案。

    数据范围

    对于10%的数据,n≤10

    对于40%的数据,n≤1000

    对于100%的数据,n≤100000,序列中的每个数≤1000000000

    水题,仔细观察之后发现只要没有重复的数,答案即为n-1。

    那么就把一个数重复多次,对答案的贡献度就是一个数,所以答案为n-1-(这个数的个数-1)=n-这个数的个数。

    再多添加别的数字,我们发现只要别的数的的个数比最多的数的个数少,就可以对答案产生贡献,所以同理答案=n-出现最多的数的个数

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[100031],dp[100031]={0};
    int main()
    {
    //    freopen("grace.in","r",stdin);
        //freopen("grace.out","w",stdout);
        int i,j;
        int n;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        int ans1=0;
        sort(a,a+n+1);
        a[0]=a[1];
        int k=1;
        for(i=1;i<=n;i++)
        {
            if(a[i-1]!=a[i])
            {
                k++;
            }
            dp[k]++;
            ans1=max(ans1,dp[k]);
        }
        int ans;
        ans=n-ans1;
        cout<<ans;
    }
    View Code
  • 相关阅读:
    海尔U+的启发:让用户对智能家居拥有“话语权”
    关于hash和ico的一些关联
    二维码简单介绍
    卡特兰数 大数模板
    C++ Linux 多线程之创建、管理线程
    Objective-c开发教程--MRC和ARC混编
    APP 打包測试流程 从零開始
    hdu4848 求到达每一个点总时间最短(sum[d[i]])。
    表结构变更后出现的ERROR OGG-01161 Bad column index (88)
    【Linux学习】Ubuntu下内核编译(一)
  • 原文地址:https://www.cnblogs.com/ashon37w/p/7168298.html
Copyright © 2020-2023  润新知