博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ3293] [Cqoi2011] 分金币 (贪心)
阅读量:5298 次
发布时间:2019-06-14

本文共 1031 字,大约阅读时间需要 3 分钟。

Description

  圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除。每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等。你的任务是求出被转手的金币数量的最小值。

Input

  第一行为整数nn>=3),以下n行每行一个正整数,按逆时针顺序给出每个人拥有的金币数。

Output 

  输出被转手金币数量的最小值。

Sample Input

4
1
2
5
4

Sample Output

4
  样例解释
  设四个人编号为1,2,3,4。第3个人给第2个人2个金币(变成1,4,3,4),第2个人和第4个人分别给第1个人1个金币。

HINT

  N<=100000,总金币数<=10^9

Source

Solution

  同,数据范围还小了不少,,,

1 #include 
2 using namespace std; 3 long long a[100005], s[100005]; 4 int main() 5 { 6 int n; 7 long long ave = 0, ans = 0; 8 scanf("%d", &n); 9 for(int i = 1; i <= n; ++i)10 scanf("%lld", a + i);11 for(int i = 1; i <= n; ++i)12 ave += a[i];13 ave /= n;14 for(int i = 1; i <= n; ++i)15 s[i] = s[i - 1] + a[i] - ave;16 sort(s + 1, s + n + 1);17 for(int i = 1; i < n / 2 + 1; ++i)18 ans += s[n / 2 + 1] - s[i];19 for(int i = n / 2 + 1; i <= n; ++i)20 ans += s[i] - s[n / 2 + 1];21 printf("%lld\n", ans);22 return 0;23 }
View Code

 

转载于:https://www.cnblogs.com/CtrlCV/p/5626444.html

你可能感兴趣的文章
codevs1174 靶形数独(DLX)
查看>>
ImageView类简介
查看>>
Gridview 重建表头/单击单元格弹出对话框/改变单元格背景色
查看>>
C++下混合编译c语言方法总结
查看>>
JavaScript 中的一些坑(一)http://roshanca.com/traps-in-javascript-part-I/
查看>>
Android(Linux)线路规程的使用
查看>>
嵌套路由
查看>>
jdbc 通过rs.getString()获取数据库中的时间字段问题
查看>>
托管和非托管
查看>>
canvas制作饼图和环形图,使用Excanvas兼容IE67
查看>>
这,才是有本事的男人
查看>>
C语言中定义全局变量
查看>>
linux中使sqlplus能够上下翻页
查看>>
ORACLE创建函数,调用函数
查看>>
PHP + Apche 在 window 系统下的环境搭建
查看>>
MDK5引脚仿真
查看>>
ajax 小练习
查看>>
ajax传值修改数据
查看>>
系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
查看>>
15个nosql数据库
查看>>