传送门

Time cost: 35min

环形均分纸牌

我们再回顾一下均分纸牌

 1     scanf("%d",&n);
 2     for(i = 1; i <= n; i++)
 3     {
 4         scanf("%d",a + i);
 5         sum += a[i];
 6     }
 7     double ave = sum / (double)n;
 8     int tim = n;
 9     sum = 0;
10     for(int i = 1; i <= n; i++)
11     {
12         sum += a[i];
13         if(sum / (double)i == ave) --tim;
14     }

就这么个东西

数组元素减掉平均值之后求前缀和

前缀和为0的时候就说明不用从左边移牌到右边 次数-1

这个题虽然问的是最小传递数 但是效果一样

开始可以考虑枚举断开的点

如果在k点断开 那么就相当于从k开始求前缀和

但是每遍求前缀和复杂度会爆炸O(n^2)

所以可以从1开始求的前缀和推出来后面的就是

n点的前缀和 S[n]-S[k]

1点的前缀和 S[1]+S[n]-S[k]

(就写这两个应该就知道了)

这样就可以O(n^2) 但是还是会爆炸

然后考虑最后的答案就是所有前缀和求和

也就是

考虑数轴上从1到n 每个S[i]位置上有一个点

求最短距离和

是不是看到了种树问题?

所以就取最中间的点就OK

复杂度O(n)+O(sort)

Code:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define rep(i,a,n) for(int i = a;i <= n;++i)
 5 const int N = 1000006;
 6 using namespace std;
 7 typedef long long ll;
 8 ll n,ave,ans;
 9 ll a[N],s[N];
10 int main() {
11     scanf("%lld",&n);
12     rep(i,1,n) scanf("%lld",a+i),ave += a[i];
13     ave /= n;
14     rep(i,1,n) a[i] -= ave,s[i] = s[i-1] + a[i];
15     sort(s+1,s+n+1);
16     ave = s[n+1 >> 1];
17     rep(i,1,n) ans += abs(ave - s[i]);
18     printf("%lld\n",ans);
19     return 0;
20 }

View Code

转载于:https://www.cnblogs.com/yuyanjiaB/p/9811559.html

luogu P2512 [HAOI2008]糖果传递相关推荐

  1. P2512 [HAOI2008]糖果传递

    传送门 算法 : 瞎搞...... 这种题是真的恶心.... 以下为一堆的结论和证明... (自己口胡的,比较细,实在不想看也可以直接看结论) 首先如果要让每个人最终的糖果一样多 1.那么肯定最终每个 ...

  2. bz10451045: [HAOI2008] 糖果传递

    1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2958  Solved: 1319 [Submit][S ...

  3. bzoj 1045: [HAOI2008]糖果传递

    1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4094  Solved: 1970 [Submit][S ...

  4. 【BZOJ】1045: [HAOI2008]糖果传递(中位数)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1045 白书上有讲 没ac的坑点在,数据范围n<=1,000,000 #include < ...

  5. BZOJ1045 HAOI2008糖果传递(贪心)

    显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数.设该平均数为t. 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断 ...

  6. BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)

    题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 假设平均数是x,且a1给an了k个(k<0说明是an给a1了-k个),那么总代价就 ...

  7. [HAOI2008]糖果传递 结论题

    题目描述 有\(n(n<1000000)\)个小朋友坐成一圈,每人有\(a_i\)个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为\(1\),求使所有人糖果数相等的最小代价. 暴力 ...

  8. [BZOJ1045][HAOI2008] 糖果传递(数学相关)

    题目描述 传送门 题目大意:有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.求使所有人获得均等糖果的最小代价. 题解 设第i个人会给第i+1个人 xi ...

  9. bzoj1045: [HAOI2008] 糖果传递

    挺有趣的.观察题目环形?切掉一个跑贪心?O(n^2)超时了... 先计算m为每个最终糖果数量. 设An传给A1了k个糖果, 那么A1传给A2的糖果数为S1=k+A1-m,T1=A1-m 那么A2传给A ...

最新文章

  1. Django博客系统(推荐文章数据展示)
  2. 北航算法作业一 约瑟夫环问题
  3. 华为修改优先级命令_VOlTE指标设定(华为网管各种命令)
  4. 调制优缺点_钓鱼,何时用搓饵、何时用拉饵?及对应的优缺点分析
  5. 利用DBMS_FILE_TRANSFER传输数据库文件
  6. 基于并查集的kruskal算法
  7. 《C Traps and Pitfalls》 笔记
  8. 应用容器Application container
  9. Performance Tuning
  10. 但是的近义词是什么,怎么用但是造句?
  11. 使用 matlab 数字图像处理(九)—— 去卷积(deconvolution,逆滤波复原)
  12. Keras搭建M2Det目标检测平台(转载)
  13. STL之容器——介绍
  14. ARM学习日记--开发板的使用
  15. Map集合简单应用的例子(世界杯)
  16. 能快速修改视频格式的工具分享
  17. 根据出生年月日计算出生了多少年,多少月,多少天
  18. 倍福PLC Modbus通信区
  19. 从零开始学微信小程序开发:1
  20. python pandas 在现有excel中插入新数据

热门文章

  1. 阿里云中间件首席架构师李小平:云原生实践助力企业高效创新
  2. mPaaS 客户端问题排查之突如其来的“白屏”等待
  3. 一篇文章教会你使用html+css3制作GIF图
  4. “数据驱动”时代来临,阿里云数据中台如何赋能金融业?(附重磅报告下载)
  5. Java 的这些坑,你踩到了吗?
  6. 成都工业学院计算机工程学院院长,青春的交接礼——成都工业学院计算机工程学院...
  7. 同时渲染两个世界:恐怖游戏《灵媒》背后的尖端技术
  8. MySQL复习资料(二)——MySQL-DDL语句
  9. Linux从零开始(三、命令图解)
  10. 安装完Oracle 11g之后启动SQL Developer 时报cannot find a j2se sdk错误的解决办法