[COJ95603]全球奥运

试题描述

一个环形的图中有N个城市,奥运会重要项目就是传递圣火,每个城市有A[i]个圣火,每个城市可以向它相邻的城市传递圣火(其中1号城市可以传递圣火到N号城市或2号城市)。现在要传播最少的圣火来达到所有城市圣火数量一样。请输出这个最小的移动的圣火数量(比如说从1号城市要移动到N号城市M个圣火,那么ans加M)。

输入

第一行:一个数N,表示有N个城市。
接下来N个整数,A[i]表示每个城市的圣火量。

输出

一个数:最少的圣火

输入示例

    

输出示例


数据规模及约定

对于所有数据:N<=10^6,保证A[i]<=10^9。
保证A[i]之和是N的倍数。

题解

显然最终状态肯定是每个城市手中圣火都是所有城市初始圣火的平均值。我们可以设 xi 表示第 i 个城市向第 i-1 个城市传递的圣火数量。那么假设第 i 个城市初始圣火为 Ai,则它最终圣火数量可以表示为 Ai - xi + xi+1 (i < n),或 An - xn + x1,那么我们可以想方设法将所有 xi (i > 1) 用 x1 表示,最终 ∑xi(0<i<n+1) = |x1| + |x1 - C1| + ... + |x1 - Cn-1| 得到这个形式之后,就可以令 x1 = 中位数 解决啦。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <cstring>
#include <string>
#include <map>
#include <set>
using namespace std; const int BufferSize = 1 << 16;
char buffer[BufferSize], *Head, *Tail;
inline char Getchar() {
if(Head == Tail) {
int l = fread(buffer, 1, BufferSize, stdin);
Tail = (Head = buffer) + l;
}
return *Head++;
}
int read() {
int x = 0, f = 1; char c = getchar();
while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
return x * f;
} #define maxn 1000010
#define LL long long
int n, A[maxn];
LL sum, S[maxn]; int main() {
n = read();
for(int i = 1; i <= n; i++) A[i] = read(), S[i] = S[i-1] + A[i], sum += A[i]; sum /= n;
for(int i = 1; i <= n; i++) A[i] = S[i] - sum * i;
A[n] = 0;
// for(int i = 1; i <= n; i++) printf("%d ", A[i]); putchar('\n');
sort(A + 1, A + n + 1);
int x = A[n+1>>1];
sum = 0;
for(int i = 1; i <= n; i++) sum += abs(x - A[i]); printf("%lld\n", sum); return 0;
}

感觉这题总是忘啊,所以放一个详细的推式子的过程。。。

A1 - x1 + x2 = S / n
A2 - x2 + x3 = S / n
A3 - x3 + x4 = S / n
...
An - xn + x1 = S / n x2 - x1 = S / n - A1
x3 - x2 = S / n - A2
x4 - x3 = S / n - A3
...
x1 - xn = S / n - An (We don't need this) x2 = S / n - A1 + x1
x3 = S / n - A2 + x2 = S / n - A2 + S / n - A1 + x1 = x1 - ((A1 + A2) - 2(S / n))
x4 = S / n - A3 + x3 = S / n - A3 + 2(S / n) - (A1 + A2) + x1 = x1 - ((A1 + A2 + A3) - 3(S / n))
x5 = S / n - A4 + x4 = S / n - A4 + 3(S / n) - (A1 + A2 + A3) + x1 = x1 - ((A1 + A2 + A3 + A4) - 4(S / n))
...
xi = x1 - ((A1 + A2 + A3 + ... + A(i-1)) - (i-1)(S / n)) (2 <= i <= n)
/***********************************************************************************************
xn = (n-1)(S / n) - (A1 + A2 + A3 + ... + A(n-1)) + x1 (1)
xn = x1 - S / n + An (2)
observe (1) and (2) and find that we don't need the last equation: x1 - xn = S / n - An
***********************************************************************************************/
let Ci = (A1 + A2 + A3 + ... + A(i-1)) - (i-1)(S / n) (2 <= i <= n)
then xi = x1 - Ci
sigma(|xi|) = sigma(|x1 - Ci|)

[KOJ95603]全球奥运的更多相关文章

  1. Gartner:2016 Q2全球服务器市场,中国再度成为亮点

    对于IT产品供应商来说,Gartner.IDC等第三方分析机构市场调研报告无疑是一次"中考",成绩优异的论功行赏,迎接鲜花和掌声:差强人意,批斗会将是不可避免的,接下来加班加点,力 ...

  2. 智能头盔 "Livall携全球首款智能骑行头盔亮相CES"

    LIVALL是全球首创集音乐.通讯.智能灯光为一体的智能骑行头盔的研发者,日前Livall携旗下智能骑行头盔BH 100和BH 60参展CES 2017,这也是目前世全球首款智能骑行头盔类产品,同时亮 ...

  3. 2015微软MVP全球峰会见闻

    2015.10.31-2015.11.8 一周的时间完成微软MVP全球峰会旅程,这一周在不断的倒时差,行程安排非常的紧张,还好和大家请假了没有更新微信公众号,今天开始继续更新微信公众号,开始新的旅程, ...

  4. 全球HTTPS时代已来,你跟上了吗?

    全球HTTPS时代已来,你跟上了吗? 互联网发展20多年,大家都习惯了在浏览器地址里输入HTTP格式的网址.但前两年,HTTPS逐渐取代HTTP,成为传输协议界的"新宠". ​ 早 ...

  5. 全球PM25实时可视化

    星期一的早上,我在办公区鸟瞰窗外,目光所到之处,用顾城的那首"你看天时很近,看我时很远"倒是格外的应景.作为一名父亲,看着工位上3M的口罩,想想此刻还在熟睡的孩子,多少有些无奈-- ...

  6. EZchip将推全球首款100核64位ARM A-53芯片

    EZchip将推全球首款100核64位ARM A-53芯片 2015-02-25 16:32:03   来源:互联网    关键字: 将推  全球  64位  arm EZchip日前表示,将准备开发 ...

  7. R可视化lend_club 全球最大的P2P平台数据75W条

    lend_club 全球最大的P2P平台2007~2012年贷款数据百度云下载. 此文章基于R语言做简单分析. rm(list=ls()) #清除变量 gc() #释放内存 step1 考虑到后续分析 ...

  8. 今年第一季全球PC出貨量同比下降5.2%

    市場調研公司Gartner上周發佈報告稱,隨著企業支出的下滑,今年第一季全球PC出貨量同比下降5.2%迪士尼美語評價.英特爾稱,第一季筆記本晶片出貨量同比增長3%,但是筆記本晶片的平均銷售價格下降了3 ...

  9. .NET足球赛事资料数据库平台SmartLottery开源发布——全球足球联赛应有尽有

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 前2个月,我的系列文 ...

随机推荐

  1. 利用WireShark进行DNS协议分析

    一.准备工作 系统是Windows 8.1Pro 分析工具是WireShark1.10.8 Stable Version 使用系统Ping命令发送ICMP报文. 二.开始工作 打开CMD.exe键入: ...

  2. Zookeeper集群的安装和使用

    Apache Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,现已经成为 Apache 的顶级项目,它是一个开放源码的分布式应用程序协调服务,是Google ...

  3. VC----文件图标和窗口图标及在任务栏显示的图标

    WNDCLASSEX wndcls; wndcls.cbSize=sizeof(wndcls); wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hb ...

  4. VS编译器从DLL导出模板类

    DLL与模板 http://msdn.microsoft.com/en-us/library/twa2aw10.aspx http://www.codesynthesis.com/~boris/blo ...

  5. chain.doFilter(request,response)含义

    过滤器的生命周期一般都要经过下面三个阶段: 初始化 当容器第一次加载该过滤器时,init() 方法将被调用.该类在这个方法中包含了一个指向 Filter Config 对象的引用.我们的过滤器实际上并 ...

  6. [FMX] Android APP 启动黑屏优化补丁

    使用说明 *************************************************** Android APP 启动黑屏优化补丁 作者: Swish, YangYxd 201 ...

  7. PHP数据类型转换

    转自:http://www.tianzhigang.com/article.asp?id=280 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: (int).(integer):转换成 ...

  8. centos 安装 mysql5.7.9初始密码问题

    mysql5.7.9在安装完成后会,root用户会产生一个不为空的初始密码,登陆mysql就会产生问题了,有必要修改一下登陆密码: 这是从网上找的一个方法,加以总结得出来的,亲测可以:# /etc/i ...

  9. vmstat、top

    vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,使用vmstat命令可以得到关于进程.内存.内存分页.堵塞IO.traps及CPU活动的信息. vmstat 最常用的有两 ...

  10. jQuery源码-dom操作之jQuery.fn.text

    写在前面 jQuery.fn.text在jQuery是个使用频率比较高的接口,它的作用无非是设置/获取dom节点的内容文本,下文会通过几个简单的例子来说明.text()接口的使用,以及最后会对源码进行 ...