bzoj1045题解

structEdge structEdge     2022-08-08     429

关键词:

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 }
View Code

 

2016-10-14 23:56:18

()

bzoj1045糖果传递

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1045题解:  完全不求知怎么推导,于是引用hzw大犇的题解:  首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用ave表示。  假设标号为i的小朋友开始... 查看详情

bzoj1045:[haoi2008]糖果传递(数论)

1045:[HAOI2008]糖果传递题目:传送门(双倍经验3293) 题解:  一开始想着DP贪心一顿乱搞,结果就GG了    十分感谢hzwer大佬写的毒瘤数论题解:  首先,最终每个小朋友的糖果数量可以计算出来,等于糖果... 查看详情

[bzoj]1045圆上的整点(haoi2008)

...pleOutput  4HINT  r<=2000000000 Solution  小C不想写题解啊啊啊啊!!!!  题解在这里啊啊啊啊!!!!(看完记得投币!!!! 查看详情

bzoj1045[haoi2008]糖果传递

传送门很久以前写过的题,忘得一干二净。题解//Twenty#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<queue>#include< 查看详情

bzoj1045[haoi2008]糖果传递

【链接】我是链接,点我呀:)【题意】在这里输入题意【题解】思路来自hzwer..设xi表示第i个人往左传递了xi个糖果。(如果小于0表示旁边的人给他了糖果。则ans=∑|xi|最后所有人的糖果数都变成sum/n->avg则a1-x1+x2=avga2-x2+x3=avg...然后... 查看详情

bzoj-1045-[haoi2008]糖果传递(中位数原理)

...人获得均等糖果的最小代价。SampleInput41254SampleOutput4 题解这道题对于最终小朋 查看详情

刷题向》关于一道像差分约束的数学题bzoj1045

...方法直接解决的。  这道题在蓝书上有原题,可以看到题解,在此再赘述一遍  首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用ave表示。  假设标号为i的小朋友开始有Ai颗糖果,Xi表示第i个小朋... 查看详情

bzoj1045:[haoi2008]糖果传递

1045:[HAOI2008]糖果传递TimeLimit:10Sec MemoryLimit:162MBSubmit:4344 Solved:2119[Submit][Status][Discuss]Description有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。Input第一行一个正整数nn&... 查看详情

bzoj1045糖果传递(代码片段)

真·水题。环形均分纸牌模板题。只需求出前缀和,然后取中位数求二重前缀和即可。1#include<cstdio>2#include<algorithm>3usingnamespacestd;4typedeflonglongLL;5constintN=1000010;6LLa[N],sum[N];7intmain()8intn;9scanf("%d",&n);10fo 查看详情

bzoj1045[haoi2008]糖果传递——贪心(代码片段)

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045好像是贪心...但这是一个环...看博客:http://hzwer.com/2656.html真是神奇的构造...还是应该大胆地先把各种变量都设出来再处理。代码如下:#include<iostream>#include<cstdio>#include<c... 查看详情

bzoj1045[haoi2008]糖果传递

环形均分纸牌问题。用A[i]表示糖果数,sum表示目标的糖果数量。用X[i]表示从i+1移动到i的糖果的个数(可+可-)。由此可以得到式子A[i]+X[i]-X[i-1]=sum。我们可以得到这样的n-1个方程(第n个可以由前n-1个推导)。但是这样不足以求... 查看详情

[bzoj1045][haoi2008]糖果传递数学

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1045我们假设每一个小朋友的代价为$x[i]$,每一次都从前面一个小朋友那里拿,这种贪心跟纸牌均摊很像,想一想很容易理解。设最后每个小朋友能得到$ave$个糖果,所以有$a[i]+x[i]-x... 查看详情

bzoj1045[haoi2008]糖果传递排序(代码片段)

题面题目传送门解法环形均分纸牌和这道题是一模一样的时间复杂度:(O(nlog))代码#include<bits/stdc++.h>#defineintlonglong#defineN1000010usingnamespacestd;template<typenamenode>voidchkmax(node&x,nodey)x=max(x,y);temp 查看详情

bzoj1045糖果传递

题目大意:把noip均分纸牌变成了环思路:基本与均分纸牌相同但是需要考虑的是起点的选择首先我们可以设i个人开始有ai个糖然后设第i个人给前一个人的糖果数为gi则a[i]-g[i]+g[i+1]=avg;avg为最终每个人的糖果数即平均值得到最终... 查看详情

贪心bzoj1045:[haoi2008]糖果传递(代码片段)

很妙的贪心思考过程Description有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。Input第一行一个正整数nn<=1‘000‘000,表示小朋友的个数.接下来n行,每行一个整数ai,表... 查看详情

bzoj1045:[haoi2008]糖果传递&&bzoj3293:[cqoi2011]分金币

一道神奇的题。。看到做法是排序我的心是绝望的。。首先我们可以先求出每个小朋友应该得到的糖果数,就是平均值,然后ave-a[i]就代表要从其他小朋友那得到多少个糖果(如果是负数就是要送出糖果)然后求前缀和,往前面... 查看详情

[bzoj1045][洛谷p2512][haoi2008]糖果传递

Description有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。Input第一行一个正整数nn<=1‘000‘000,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的... 查看详情

题解[p1045]麦森数(代码片段)

题目题目描述形如2^P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2^P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它... 查看详情