0~9的平均数(python B组)

简介: 0~9的平均数(python B组)

有一个长度为 n 的数组(n 是 10的倍数),每个数 ai都是区间 [0,9] 中的整数。


小明发现数组里每种数出现的次数不太平均,而更改第 i个数的代价为 bi,他想更改若干个数的值使得这 10 种数出现的次数相等(都等于 n/10),请问代价和最少为多少。


输入格式

输入的第一行包含一个正整数 n。


接下来 n 行,第 i 行包含两个整数 ai,bi用一个空格分隔。


输出格式

输出一行包含一个正整数表示答案。


数据范围

对于 20%的评测用例,n≤1000;

对于所有评测用例,n≤10^5,0<bi≤2×10^5。


输入样例:
10
1 1
1 2
1 3
2 4
2 5
2 6
3 7
3 8
3 9
4 10
输出样例:
27
样例解释

只更改第 1,2,4,5,7,8个数,需要花费代价 1+2+4+5+7+8=27。

思路:

看下图,要使得总体平均


1.多出的数字不可能变成多的数字,比如0变成2


2.少的数字也不可能变成多的数字,比如1变成0


3.少的数字也不可能变成少的数字,比如1变成3


因为即使又上述情况,也仅仅是其中一种方式的过程,可以一步到位拆成了两步;


所以这里只能由多的变成少的。


完整代码:

完整代码:

#include <iostream>
using namespace std;
typedef long long ll;
#include <algorithm>
#include <vector>
vector<int> w[10];
 
int main(){
    int n,a,b;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a>>b;
        w[a].push_back(b);
    }
    ll res=0;
    int avg=n/10;
    for(int i=0;i<10;i++)
    {
        if(w[i].size()>avg)
        {   
            sort(w[i].begin(),w[i].end());
            for(int j=0;j<w[i].size()-avg;j++)
            {
                res+=w[i][j];
            }
        }
        
    }
    cout<<res;
}
相关文章
|
6月前
|
存储 Python
python计算两个数的和
python计算两个数的和
|
6月前
|
Python
Python中列表求和的深入理解
Python中列表求和的深入理解
116 0
|
6月前
|
Python
Python获取最大值函数
Python获取最大值函数
|
2月前
|
Python
Python 练习实例44 - Python 两个矩阵相加
Python 练习实例44 - Python 两个矩阵相加
|
5月前
|
Python
Python中限制输入数范围的技巧与实践
Python中限制输入数范围的技巧与实践
90 6
|
6月前
|
数据挖掘 Python
Python计算平均值
Python计算平均值
|
6月前
|
Python
在Python中计算一组数值数据的中位数
在Python中计算一组数值数据的中位数
239 2
|
11月前
|
Python
由python生成矩阵引发的列表 * 思考
在python中,如何构建矩阵呢,我们一般都想到用列表去实现吧。 于是染念便使用列表的特性快速生成
35 0
|
UED Python
python求最大最小平均值
python求最大最小平均值
189 0
|
Python
Python fractions模块 —— 分数相关函数
Python fractions模块 —— 分数相关函数
192 0