hiho1619“共同富裕”
来源:互联网 发布:微信模板消息 java 编辑:程序博客网 时间:2024/06/09 15:18
#1619 : “共同富裕”
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
- 样例输入
5 1 1 1 2 3
- 样例输出
3
描述
给定一个数组A1, A2, ... AN,每次操作可以从中选定一个元素Ai,把除了Ai之外的所有元素都加1。
问最少几次操作可以实现“共同富裕”,即数组中所有元素都相等。
例如对于[1, 1, 1, 2, 3]经过3步:[1, 1, 1, 2, 3] -> [2, 2, 2, 3, 3] -> [3, 3, 3, 3, 4] -> [4, 4, 4, 4, 4]。
输入
第一行包含一个整数N。(1 ≤ N ≤ 100000)
以下N行包含N个整数A1, A2, ... AN。 (1 ≤ Ai ≤ 100000)
输出
最小的操作数
思路:题目描述就是题意了,很明确。那么要想每个数都相等,并且操作数最少,那么在这些操作里面,我们一定
不能取最小值的数,因为取出来以后,只会让这个数跟比它大的数相差更大,是远离最终目标的。
所以如果是模拟来做的话,就是每次取最大的数,这样才不至于取出的数跟比它大的数相差更远。
那么对于最小值而言,是不会被取出的,因为总有比它大的数,而当它跟别的数一样大的时候,操作就结束了。
所以,最小的数在全过程中的每步操作都是被+1,而最小数增长到跟比它大的数一样的机会就是这个大数被拿
出去了,这样小数+1,大数不变,才可以缩小差距,每次操作都有数被拿出去。所以要想缩小全部差距,就计算一下
其它数比最小数一共大多少。
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define INF 0x3f3f3f3fint mod = 1000000007;const int N = 101000;int rec[N];int main() { int n; while (~scanf("%d", &n)) { for (int i = 0; i < n; i++) scanf("%d", rec + i); sort(rec, rec + n); ll ans = 0; int a = rec[0]; for (int i = 0; i < n; i++) ans += rec[i] - a; cout<<ans<<endl; } return 0;}
阅读全文
0 0
- hiho1619“共同富裕”
- 随笔——共同富裕
- hihocoder #1619 : “共同富裕”
- [hihocoder]#1619“共同富裕” && #1620股票价格3
- 磁县韩书田谈“共同富裕”是执政为民的必然追求
- hiho 1619 “共同富裕” [Offer收割]编程练习赛34 Problem A 数学
- 十进制转二进制、二进制转十进制
- 机房收费系统之完结篇
- zcmu-1984
- 【正明吉利】烟雾阴霾一扫而光 -吉利生态净化舱
- python初试——模拟登陆
- hiho1619“共同富裕”
- 数据库优化
- 快速幂 & 素数筛法
- 第十周 项目一 验证算法 (2)二叉树构造算法的验证
- Luogu 3373(线段树标记混合下传)
- HLS协议学习总结
- opencv安装与python cv2安装
- MapReduce编程模型及实现WordCount
- MySQL 修改/忘记用户密码