题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 费用流TLE. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define ll long long using namespace std; ; const ll INF=1e15; ,pre[N]…
1045: [HAOI2008] 糖果传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1045 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 小朋友个数n 下面n行 ai Output 求使所有人获得均等糖果的最小代价. Sample Input 4 1 2 5 4 Sample Output 4 Hint 100% n<=987654321…
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1812  Solved: 846[Submit][Status] Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 小朋友个数n 下面n行 ai Output 求使所有人获得均等糖果的最小代价. Sample Input 4 1 2 5 4 Sample Output 4…
题目链接: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 为平均分…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 好像是贪心...但这是一个环... 看博客:http://hzwer.com/2656.html 真是神奇的构造...还是应该大胆地先把各种变量都设出来再处理. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespa…
题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 假设平均数是x,且a1给an了k个(k<0说明是an给a1了-k个),那么总代价就可以算出来: an an+k a1-k a2 代价:|k| x a1+a2-x-k a3 代价:|a1-x-k| x a1+a2+a3-2x-k 代价:|a1+a2-2x-k| x 代价:|a1+a2+a3-3x-k| 令bi=sum(a1..i)-ix,则总代价=sum|bi-k|.易知k为中位数时此值…
感觉我的智商可能不够写题解,就直接截了hzwer的blog 地址http://hzwer.com/2656.html #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=1000005; int n,a[N],c[N],p; long long sum,ans; int read() { int r=0,f=1; char p=getchar()…
1045: [HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=987654321,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. Output 求使所有人获得均等糖果的最小代价. Sample Input 4 1 2 5 4 Sample Output 4     [分析] 一道经典题. 设xi为i给i-1多少个糖果(负的…
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.Input 小朋友个数n 下面n行 aiOutput 求使所有人获得均等糖果的最小代价.Sample Input41254 Sample Output4数据规模30% n<=1000100% n<=1000000 说难又不难,我对数学题没什么感觉啊 首先,均分纸牌都做过吧(什么,没做过!?百度NOIP2002均分纸牌) 这个只是环形而已,为了把它变成环形,我们要知道a1给了…
http://www.lydsy.com/JudgeOnline/problem.php?id=1045 白书上有讲 没ac的坑点在,数据范围n<=1,000,000 #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #include <queue&…
Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4897  Solved: 2457[Submit][Status][Discuss] Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'000,表示小朋友的个数. 接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. Output 求使所有人获得均等糖果的最小代价.…
1045: [HAOI2008] 糖果传递 题目:传送门(双倍经验3293) 题解: 一开始想着DP贪心一顿乱搞,结果就GG了 十分感谢hzwer大佬写的毒瘤数论题解: 首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用ave表示. 假设标号为i的小朋友开始有Ai颗糖果,Xi表示第i个小朋友给了第i-1个小朋友Xi颗糖果,如果Xi<0,说明第i-1个小朋友给了第i个小朋友Xi颗糖果,X1表示第一个小朋友给第n个小朋友的糖果数量. 所以最后的答案就是ans=|X1| + |X2|…
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2975 Solved: 1327 [Submit][Status][Discuss] Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 小朋友个数n 下面n行 ai Output 求使所有人获得均等糖果的最小代价. Sample Input 4 1 2 5 4 Sampl…
[BZOJ1045][HAOI2008]糖果传递 题面 bzoj 洛谷 题解 根据题意,我们可以很容易地知道最后每个人的糖果数\(ave\) 设第\(i\)个人给第\(i-1\)个人\(X_i\)个糖果(\(i=1\)则表示第1个人个第\(n\)个人,\(X_i<0\)则表示\(i-1\)给\(i\)糖果\(-X_i\)) 由题,第一个人最后\(A_1-X_1+X_2=ave\)个 \(\Rightarrow x_2=ave-A_1+X_1\)(设\(C_1=A_1-ave\),下面同理) \(…
P2512 [HAOI2008]糖果传递 第一步,当然是把数据减去平均数,然后我们可以得出一串正负不等的数列 我们用sum数组存该数列的前缀和.注意sum[ n ]=0 假设为链,那么可以得出答案为abs( sum[ 1 ] )+abs( sum[ 2 ] )+...+abs( sum[ n ] ) 但是题目说的是环 我们设在第 k 个人处断开环成链. 那么答案为 abs( sum[ k+1 ] - sum[ k ] )+abs( sum[ k+2 ] - sum[ k ] )+...+abs(…
[BZOJ1045][HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=987654321,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. Output 求使所有人获得均等糖果的最小代价. Sample Input 4 1 2 5 4 Sample Output 4 题解:面对环上的问题我们仍然考虑把环拆开 我们先不考虑n—…
[HAOI2008]糖果传递 题目描述 有 n n n 个小朋友坐成一圈,每人有 a i a_i ai​ 个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为 1 1 1. 输入格式 小朋友个数 n n n,下面 n n n 行 a i a_i ai​. 输出格式 求使所有人获得均等糖果的最小代价. 输入输出样例 样例输入1 4 1 2 5 4 样例输出1 4 说明 / 提示 对于 100 % 100\% 100% 的数据 n ≤ 1 0 6 n\le 10^6 n≤106. Code…
Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Input 第一行为整数n(n>=3),以下n行每行一个正整数,按逆时针顺序给出每个人拥有的金币数. Output 输出被转手金币数量的最小值. Sample Input 4 1 2 5 4 Sample Output 4 样例解释 设四个人编号为1,2,3,4.第3个人给第2个人2个金币(变成1,4,3,…
题面传送门 首先根据我们刚学插值时学的理论知识,\(f(i)\) 是关于 \(i\) 的 \(k+1\) 次多项式.而 \(g(x)\) 是 \(f(x)\) 的前缀和,根据有限微积分那一套理论,\(g(x)\) 是关于 \(x\) 的 \(k+2\) 次多项式.注意到此题 \(k\) 数据范围不过 \(10^2\) 级别,因此我们可以考虑把 \(g\) 多项式的系数插出来.我们代入 \(k+3\) 个点值 \(1,2,3,\cdots,k+3\),预处理出 \(\prod\limits_{i=…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 思路来自hzwer.. 设xi表示第i个人往左传递了xi个糖果. (如果小于0表示旁边的人给他了糖果. 则ans=∑|xi| 最后所有人的糖果数都变成sum/n->avg 则 a1-x1+x2 = avg a2-x2+x3= avg ... 然后可以用avg和x1来表示所有的x2...xn 比如 x2 = x1-(avg-a1) x3 = x1-(2avg-a1-a2) .... 会发现x1右边的式子都是常量. 且都是x1-ci…
题目描述 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 输入输出格式 输入格式: 小朋友个数n 下面n行 ai 输出格式: 求使所有人获得均等糖果的最小代价. 输入输出样例 输入样例#1: 复制 4 1 2 5 4 输出样例#1: 复制 4 说明 对于100%的数据 n≤106n\le 10^6n≤106 首先每个人最后的糖果数是可以计算出来的,我们记其为$M$. 假设有$4$个人,编号$1$~$4$,第$i$个人初始糖果数量为$A_i$,设…
显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数.设该平均数为t. 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断开了.假装现在我们已经知道了1号小朋友要给n号小朋友x颗糖果(可以为负).那么,2给1,3给2,4给3,等等等等,小朋友之间传递的糖果数都被确定了. 1号给了n号x颗后,其还剩a1-x颗,那么2号小朋友就要给1号t-(a1-x)=x-(a1-t)颗. 把1.2号看成整体,给了n号x颗后,其还剩a1+…
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'000,表示小朋友的个数. 接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. Output 求使所有人获得均等糖果的最小代价. Sample Input 41254 Sample Output 4 Solution 数学题 1045和3293是重题所以就放一起了,其实还有lrj蓝书上面的一道题也和这个一样(UV…
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. Output 求使所有人获得均等糖果的最小代价. Sample Input 4 1 2 5 4 Sample Output 4 HINT Source Solution 设$x[i]$表示$i+1$向$i$传的糖果数,$x[n]$表示$1$向$n$传的糖果…
题目描述 有\(n(n<1000000)\)个小朋友坐成一圈,每人有\(a_i\)个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为\(1\),求使所有人糖果数相等的最小代价. 暴力的做法比较显然,有\(30\)分,这里就不再赘述了. 推一波式子:先考虑一条链的情况,\(a[i]\)为原数组,\(b[i]\)为\(a[i]\)每项分别减掉平均数的数组,\(sum1[i],sum2[i]\)分别为\(a[i],b[i]\)的前缀和数组,\(ave\)为平均数.则\(ans\)可表示为\…
题目描述 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 输入输出格式 输入格式: 小朋友个数n 下面n行 ai 输出格式: 求使所有人获得均等糖果的最小代价. 输入输出样例 样例输入: 4 1 2 5 4 样例输出: 4 思路: 本题是一道很单纯的贪心题,类似于有环的均分纸牌. 首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用ave表示. 假设标号为i的小朋友开始有Ai颗糖果,Xi表示第i个小朋友给了第i-1个小朋友Xi颗糖…
很妙的贪心思考过程 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'000,表示小朋友的个数. 接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. Output 求使所有人获得均等糖果的最小代价. Sample Input 4 1 2 5 4 Sample Output 4 题目分析 注意到传递糖果时候传递给不相邻的人是不优的,但是如何决策传给相邻人多少糖果呢…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1045 我们假设每一个小朋友的代价为$x[i]$,每一次都从前面一个小朋友那里拿,这种贪心跟纸牌均摊很像,想一想很容易理解. 设最后每个小朋友能得到$ave$个糖果,所以有$a[i]+x[i]-x[i+1]=ave$. 写出每一个形如这样的式子,可以消元得到$x[n]=x[1]+(n-1)*ave-sum[n-1]$. 我们令$c[i]=(i-1)*ave-sum[i-1]$,则我们最后所…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1045 分析:均分纸牌的环状版本. 先看线性的版本: 设f[i]表示第I位从第i+1位得到的糖果数 则f[i]=tot/n-a[i]+f[i-1] 对f[]求和就行了 对于环状版本也这么考虑,唯一特殊的就是a[1]可以给a[n],不妨设给了k个 那么f[n]=f[n]-k,那么往前推f[n-1]=f[n-1]-k,……,于是每个f[i]=f[i]-k 所以最后结果为singma(f[i…
传送门:https://www.luogu.org/problemnew/show/P2512 题意: 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.问使得每个人手中糖果个数相同的最小代价. 思路: 如果不是环.这道题要考虑前 i 个人 和前(i+1)个人的转移,前i个人必须从第i+1个人中拿到sum(1-i) - i * ave的个数.所以总费用就是n个前缀和相加(这里的前缀和已经减去平均值).因为是环,可以发现以第K个人开始记录的前缀和可以…