解题思路:

附上刘汝佳老师的解题过程:

首先最终每个人的金币数量可以计算出来,它等于金币总数除以人数n。接下来用M来表示每个人最终拥有的金币数。
 现在假设编号为 i 的人初始有Ai 枚金币,对于1号来说,他给了4号x1枚金币,还剩Ai -x1枚金币;但是2号给了他x2枚金币,所以还剩A1-x1+x2枚金币。所以A1-x1+x2=M。同理对于第2个人,有A2-x2+x3=M。最终得到n个方程,实际上只有n-1个有用
  尝试用x1表示出其他的xi ,则本题就变成了单变量的极值问题。
  对于第1个人,A1-x1+x2=M → x2=M-A1+x1=x1-C1(规定C1=A1-M,下面类似)
  对于第2个人,A2-x2+x3=M → x3=M-A2+x2=2M-A1-A2+x1=x1-C2
  对于第3个人,A3-x3+x4=M → x4=M-A3+x3=3M-A1-A2-A3+x1=x1-C3
  ...
  对于第n个人,An-xn+x1=M。这是一个多余的等式。
  我们希望所有xi 的绝对值之和尽量小,即|x1|+|x1-C1|+|x1-C2|+...+|x1-Cn-1|要最小。注意到|x1-Ci|的几何意义是数轴上的点x1到Ci 的距离,所以问题变成了:给定数轴上n个点,找出一个到他们距离之和尽量小的点。
  而这个点就是中位数,它实在是太优美,太巧妙了,而且不少其他问题也能用的上。

代码:

 #include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
long long a[],b[];
int main()
{
int n,i;
long long k,sum,t;
while(~scanf("%d",&n))
{
k=;
for(i=;i<=n;i++)
{
scanf("%lld",&a[i]);
k=k+a[i];
}
k=k/n;
b[]=;
for(i=;i<n;i++)
{
b[i]=b[i-]+a[i]-k;
}
sort(b,b+n);
t=b[n/];
sum=;
for(i=;i<n;i++)
{
sum=sum+abs(t-b[i]);
}
printf("%lld\n",sum);
}
return ;
}

ZCMU 1019: 分金币的更多相关文章

  1. 分金币 bzoj 3293

    分金币(1s 128M)  coin [问题描述] 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的 ...

  2. 【BZOJ-3293&1465&1045】分金币&糖果传递×2 中位数 + 乱搞

    3293: [Cqoi2011]分金币 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 854  Solved: 476[Submit][Status] ...

  3. 【贪心+中位数】【UVa 11300】 分金币

    (解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...

  4. 【BZOJ3293】分金币(贪心)

    [BZOJ3293]分金币(贪心) 题面 BZOJ 洛谷 题解 和上一题一样啊. #include<cstdio> #include<cmath> #include<al ...

  5. BZOJ3293: [Cqoi2011]分金币(数学)

    3293: [Cqoi2011]分金币 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1596  Solved: 969[Submit][Status ...

  6. cogs 1430. [UVa 11300]分金币

    1430. [UVa 11300]分金币 ★☆   输入文件:Wealth.in   输出文件:Wealth.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 圆桌旁坐着 ...

  7. Java实现蓝桥杯分金币

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

  8. java实现第五届蓝桥杯海盗分金币

    海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩上发现 ...

  9. [luogu3878][TJOI2010]分金币【模拟退火】

    题目描述 现在有n枚金币,它们可能会有不同的价值,现在要把它们分成两部分,要求这两部分金币数目之差不超过1,问这样分成的两部分金币的价值之差最小是多少? 分析 根据模拟退火的基本套路,先随机分两堆金币 ...

随机推荐

  1. HTML5实现输入密码(六个格子)

    我的思路:用六个li充当六个格子,同时将input框隐藏,点击承载六个格子的容器时,使焦点聚焦在input上,可以输入.通过监听input框输入的长度,控制格子内小黑点是否显示,同时用正则替换非数字. ...

  2. marquee 标签的使用介绍

    marquee 实现滚动效果(创建滚动的文本字幕) 1.marquee 支持的属性: (1).behavior设置滚动方式: <marquee behavior="alternate& ...

  3. react阻止默认事件

    return false无效  必须 preventDefault

  4. 用Struts2实现列表显示和分页功能

    引用自http://www.2cto.com/kf/201309/243730.html BlogDAO.java文件 /** 根据条件(默认一张表所有数据)返回多条记录 */ public List ...

  5. android开启线程的误区

    发现一些刚学android的人,和我当初一样,对android的线程会存在着一定误区. 在android中,开启新线程时,一些人会用以下方法: new Handler().post(r); 但是这样并 ...

  6. 0ctf2017-babyheap

    前言 又是一道令人怀疑人生的 baby 题. 这道题利用思路非常巧妙,通过 堆溢出 和 fastbin 的机制构造了 information leak, 然后通过 fastbin attack 可以读 ...

  7. Java反射机制动态代理

    1.什么事反射机制动态代理 在一段代码的前后动态执行其他操作,比如有一个方法是往数据库添加一个记录,我们可以通过动态代理,在操作数据库方法的前和后添加代码执行打开数据库连接和关闭数据库连接. 2.演示 ...

  8. LOCAL_LISTENER 引起的错误

    1. 如果你的LOCAL_LISTENER 指定的是一个别名 比如L2 *.local_listener='L2' 启动实例的时候 会先到 tnsnames.ora 文件里取查找定义名为L2的TNS服 ...

  9. logback总结

    Logback Logback由三大模块组成:logback-core.logback- classic和logback-access. Logback-core是其它两个模块的基础模块. Logba ...

  10. B2B 电商业务之 Quote

    商品在网店页面上一般会向买家显示价格.对于B2B, 同一商品对不同的买家可能会展示不同的价格.即使如此,买家仍然可以和卖家再协商价格,最终以不同于网店中显示的价格成交.这个协商价格过程就叫Quote, ...