BZOJ 1045 题解

1045: [HAOI2008] 糖果传递

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3502  Solved: 1623
[Submit][Status][Discuss]

Description

  有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。

Input

  第一行一个正整数n<=987654321,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的
糖果的颗数.

Output

  求使所有人获得均等糖果的最小代价。

Sample Input

4
1
2
5
4

Sample Output

4

Solution

刘汝佳蓝书上有具体推导过程,这里代码:

 1 /**************************************************************
 2     Problem: 1045
 3     User: shadowland
 4     Language: C++
 5     Result: Accepted
 6     Time:2056 ms
 7     Memory:16932 kb
 8 ****************************************************************/
 9
10 #include "bits/stdc++.h"
11
12 using namespace std;
13 typedef long long QAQ ;
14 const int maxN = 1e6 + 1e3 ;
15
16 QAQ long_long_INPUT ( ) {
17         QAQ x = 0 , f = 1 ; char ch = getchar ( ) ;
18         while ( ch < ‘0‘ || ch > ‘9‘ ) { if ( ch == ‘-‘ ) f = -1 ; ch = getchar ( ) ; }
19         while ( ch >= ‘0‘ && ch <= ‘9‘ ) { x = ( x << 1 ) + ( x << 3 ) + ch - ‘0‘ ; ch = getchar ( ) ; }
20         return x * f ;
21 }
22
23 long long A[ maxN ] , C[ maxN ] , tot , M ;
24 int main ( ) {
25         int n;
26         n = long_long_INPUT ( ) ;
27         tot = 0;
28         for ( int i=1 ; i<=n ; ++i ){
29                 A[ i ] = long_long_INPUT ( ) ;
30                 tot += A[ i ] ;
31         }
32         M = tot / n;
33         C[ 0 ] = 0;
34
35         for(int i=1 ; i<n ; ++i ) C[ i ] = C[ i - 1 ] + A[ i ] - M ;
36
37         sort( C, C + n ) ;
38         long long x1 = C[ n / 2 ], ans = 0 ;
39         for(int i=0 ; i<n ; ++i ) ans += abs ( x1 - C[ i ] ) ;
40
41         cout << ans ;
42
43         return 0;
44 }

2016-10-14 23:56:18

()

时间: 10-12

BZOJ 1045 题解的相关文章

bzoj 1045 糖果传递

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1045 题解: 完全不求知怎么推导,于是引用hzw大犇的题解: 首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用ave表示. 假设标号为i的小朋友开始有Ai颗糖果,Xi表示第i个小朋友给了第i-1个小朋友Xi颗糖果,如果Xi<0,说明第i-1个小朋友给了第i个小朋友Xi颗糖果,X1表示第一个小朋友给第n个小朋友的糖果数量. 所以最后的答案就是ans=|X1| + |X2|

[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 为平均分

点分治专题——bzoj 1468 &amp;bzoj 2152 题解

[前言]最近一直在忙着学算法,但是效果似乎不是很好.前段时间的树剖也快忘了= =.树套树没熟练,就开始写主席树了= =.更别说本身就不是很懂的莫比乌斯反演了.~~决定好好复习一下. [点分治的作用]套用SYC大神的话说是:用来解决树上路径点权统计问题. [大致流程] ①找出这颗树的重心. ②统计经过这个重心的答案 ③用重心把树割开 ④对每个"小树"做同样的事 [Q1--重心]其实找重心再进行计算只是为了不被卡链.什么是重心?就是当前树中的一个点K,使得MAX(SON[K])最小.SON

BZOJ 1054题解 BFS暴力求解

BZOJ 1054题解 BFS暴力求解 1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1884  Solved: 1033[Submit][Status][Discuss] Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移 动到某人

bzoj一句话题解

bzoj一句话题解 by wawawa8 1000 a+b 1001 平面图最小割->对偶图最短路 1002 就是生成树个数,通过基尔霍夫矩阵可以得出递推式 \(f_i=3f_{i-1}-f_{i-2}+2\),然后高精度算一下 1003 令 \(c[i][j]\) 表示从第 \(i\) 天到第 \(j\) 天从 \(1\) 到 \(n\) 不转换路线的最短距离,然后 \(f[i]\) 表示前 \(i\) 天所需要的最小成本,枚举上一次修改路线的位置 \(j\),即 \(f_i=f_j+c[j+

BZOJ 1045 糖果传递 题解 【递推乱搞就对了

1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3505  Solved: 1626[Submit][Status][Discuss] Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=987654321,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. Outpu

[BZOJ]1045 圆上的整点(HAOI2008)

数学题第二弹! Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 一个正整数r. Output 整点个数. Sample Input 4 Sample Output 4 HINT r<=2000 000 000 Solution 小C不想写题解啊啊啊啊!!!! 题解在这里啊啊啊啊!!!!(看完记得投币!!!!) 我爱数学啊啊啊啊!!!! 开玩笑的,还是说一说题解吧. 相信如果你认真看完了上面那个视频的前25min,心里肯定已经有不下一

BZOJ 4868-4873 题解

BZOJ4868 每个结束位置的最优值很显然具有单调性,三分,再讨论一下就好了. 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define FILE "exam" 5 #define up(i,j,n) for(int i=j;i<=n;i++) 6 #define db long double 7 #define pii pair<int,int>

bzoj 1045

确定初始状态(n与1直接谁给了谁几个),后面的就确定了,再根据总结出来的东西决定前面谁给谁几个最优. n=1000000!!! 1 /************************************************************** 2 Problem: 1045 3 User: idy002 4 Language: C++ 5 Result: Accepted 6 Time:1852 ms 7 Memory:12524 kb 8 *******************