[BZOJ 1045] [HAOI2008] 糖果传递
题目链接:BZOJ 1045
Attention:数据范围中 n <= 10^5 ,实际数据范围比这要大,将数组开到 10^6 就没有问题了。
我们先来看一下下面的这个问题。
若 n 个人坐成一行,不围成圈,那么我们可以用 f[i] 来表示第 i 个人需要从第 i-1 个人那里获得多少个糖果。(这就是“均分纸牌”那道题)
当 f[i] < 0 时,表示第 i 个人需要给第 i-1 个人 | f[i] | 个糖果。
那么 f[i] = K - (A[i] - f[i+1]) ,其中 K 为平均分配后每个人的糖果数量。
答案 Ans 就为 Σ | f[i] | ,从 n 到 1 依次求 f[i] 即可。
再回到 BZOJ-1045 这道题。
令 f[i] 表示第 i 个人从第 i-1 个人那里获取的糖果数量。特别地,f[1] 表示第 1 个人从第 n 个人那里获取的糖果数量。
一旦我们确定其中的任何一个 f[i] ,其他的所有 f[i] 也就都随之确定了。
令 g[i] = f[i] - f[i - 1] ( 1 < i <= n ) ,那么 f[i] = S[i] + f[1] ,其中 S[i] = Σ g[j] ( 1 < j <= i ) 。特别地,S[1] = 0 。
那么最后的答案 Ans = Σ | S[i] + f[1] | = Σ | S[i] - (-f[1]) | ,即为 S[i] 到 -f[1] 的距离和。
可以发现 g[i] = f[i] - f[i-1] = f[i] - [K - (A[i-1] - f[i])] = A[i-1] - K 。
那么 g[i] , S[i] 的值都是固定的,与 f[1] 无关,问题转化为求一个数轴上的点,使数轴上 n 个定点到它的距离和最小。
我们知道,当这个动点为 n 个定点的中位数时,距离和最小。
那么就很容易写出代码。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm> using namespace std; const int MaxN = 1000000 + 5; int n; typedef long long LL; LL Tot, K, Ans, f1;
LL A[MaxN], g[MaxN], S[MaxN]; inline LL Abs(LL x) {
return x > 0ll ? x : -x;
} int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &A[i]);
Tot += A[i];
}
K = Tot / (LL)n;
for (int i = 2; i <= n; i++) g[i] = A[i - 1] - K;
S[1] = 0;
for (int i = 2; i <= n; i++) S[i] = S[i - 1] + g[i];
sort(S + 1, S + n + 1);
f1 = -S[(n + 1) >> 1];
Ans = 0ll;
for (int i = 1; i <= n; i++) Ans += Abs(S[i] + f1);
printf("%lld\n", Ans);
return 0;
}
[BZOJ 1045] [HAOI2008] 糖果传递的更多相关文章
- BZOJ 1045: [HAOI2008] 糖果传递 数学
1045: [HAOI2008] 糖果传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1045 Description 有n个小朋友坐 ...
- bzoj 1045: [HAOI2008] 糖果传递 贪心
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1812 Solved: 846[Submit][Stat ...
- bzoj 1045 [HAOI2008] 糖果传递——设变量推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 费用流TLE. #include<iostream> #include&l ...
- BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)
题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 假设平均数是x,且a1给an了k个(k<0说明是an给a1了-k个),那么总代价就 ...
- bzoj 1045 [HAOI2008] 糖果传递 —— 贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 好像是贪心...但这是一个环... 看博客:http://hzwer.com/2656 ...
- bzoj 1045: [HAOI2008] 糖果传递【瞎搞】
感觉我的智商可能不够写题解,就直接截了hzwer的blog 地址http://hzwer.com/2656.html #include<iostream> #include<cstd ...
- 【BZOJ 1045】 1045: [HAOI2008] 糖果传递
1045: [HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n& ...
- 【BZOJ】1045: [HAOI2008]糖果传递(中位数)
http://www.lydsy.com/JudgeOnline/problem.php?id=1045 白书上有讲 没ac的坑点在,数据范围n<=1,000,000 #include < ...
- 1045: [HAOI2008] 糖果传递 - BZOJ
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.Input 小朋友个数n 下面n行 aiOutput 求使所有人获得均等糖果的 ...
随机推荐
- 【MongoDB安装和基础学习系列】
转:http://www.cnblogs.com/lipan/archive/2011/03/08/1977691.html 系列目录 MongoDB学习笔记(一) MongoDB介绍及安装 ...
- mysql其他函数
mysql,,); +---------------+ ,,) | +---------------+ | +---------------+ row in set (0.22 sec) mysql) ...
- 为什么DropDownList的SelectedIndexChanged事件触发不了
写的还行,转来大家看看 为什么DropDownList的SelectedIndexChanged事件触发不了? 为什么设置了DropDownList的AutoPostBack="True&q ...
- Java基础知识强化之集合框架笔记55:Map集合之HashMap集合(HashMap<Integer,String>)的案例
1. HashMap集合(键是Integer,值是String的案例) 2. 代码示例: package cn.itcast_02; import java.util.HashMap; import ...
- Bootstrap后台使用问题汇总(一)
第一次自己汇总写博客啊,不懂规矩,大家包涵~~ 最近进行的项目中需要一个后台,于是在网上Down了许多Bootstrap后台源码.精挑细选决定用“ACE后台管理系统”(因为是中文的,英文三级狗的小鹿还 ...
- (转)Spring读书笔记-----Spring的Bean之Bean的基本概念
从前面我们知道Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架 ...
- struts启动报错Javassist library is missing
很久不用struts2,最近在配置的时候,启动服务器报错 Caused by: java.lang.ExceptionInInitializerError at com.opensymphony.xw ...
- 微信公众平台开发(一)——接入指南(asp.net)
第一步:申请消息接口 在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL.Token可由开发者任意填写,用作 ...
- (转)PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
一.中文截取:mb_substr() mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $l ...
- doj常用包
dojo.raise 抛出一个异常 dojo.errorToString将异常转换为字符串 dojo.render 系统环境对象 dojo.hostenv. ...