zoukankan      html  css  js  c++  java
  • Codeforces 1008C

    题意略。

    思路:

    其实我们没有必要关注每个数字的位置,我们只要把大的数字放在小的数字上就可以了,这样它的位置必然会发生变换。

    在变换时,这个替换的序列越长越好,每个序列对答案的贡献就是该序列的长度 - 1。

    我们可以把这个题抽象为一个柱形图,每个柱子的下标为某个数字,且从左向右下标数字减小,该柱子的高度就是该数字出现的次数。

    我们要完成一个尽可能长的序列,也就是从该柱形图的左边一直贯穿到右边,柱形图中的高度最高者就是替换的序列数。

    在该柱形图中,一个序列的高度为1。

    所以不难想到,ans = 柱形图总面积 - max(height)。

    详见代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    map<int,int> mp;
    
    int main(){
        int n;
        int temp;
        scanf("%d",&n);
        int maxx = 0;
        for(int i = 0;i < n;++i){
            scanf("%d",&temp);
            ++mp[temp];
            maxx = max(maxx,mp[temp]);
        }
        printf("%d
    ",n - maxx);
        return 0;
    }
  • 相关阅读:
    异步IO数据库队列缓存
    requests.post发送字典套字典
    Git
    Django REST framework
    7. 函数-自定义函数
    6. 小数据池-编码-文件操作
    5. 基本数据结构-集合
    4. 基本数据结构-字典
    3. 基本数据结构-元组
    2. 基本数据结构-列表
  • 原文地址:https://www.cnblogs.com/tiberius/p/9362611.html
Copyright © 2011-2022 走看看