zoukankan      html  css  js  c++  java
  • 东北育才 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
  • 相关阅读:
    day10_发送邮件终极版
    day10_发送带附件的邮件
    day10_发送普通邮件
    day10_多线程性能测试
    day10_虚拟环境和搭建测试环境的步骤
    codeforces 877B
    codeforces 982C Cut 'em all! (dfs)
    洛谷P1171 售货员的难题 dp
    点集配对问题
    codeforces 891A Pride (数学)
  • 原文地址:https://www.cnblogs.com/ashon37w/p/7168298.html
Copyright © 2011-2022 走看看