luogu P2512 [HAOI2008]糖果传递
传送门
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]糖果传递相关推荐
- P2512 [HAOI2008]糖果传递
传送门 算法 : 瞎搞...... 这种题是真的恶心.... 以下为一堆的结论和证明... (自己口胡的,比较细,实在不想看也可以直接看结论) 首先如果要让每个人最终的糖果一样多 1.那么肯定最终每个 ...
- bz10451045: [HAOI2008] 糖果传递
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2958 Solved: 1319 [Submit][S ...
- bzoj 1045: [HAOI2008]糖果传递
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4094 Solved: 1970 [Submit][S ...
- 【BZOJ】1045: [HAOI2008]糖果传递(中位数)
http://www.lydsy.com/JudgeOnline/problem.php?id=1045 白书上有讲 没ac的坑点在,数据范围n<=1,000,000 #include < ...
- BZOJ1045 HAOI2008糖果传递(贪心)
显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数.设该平均数为t. 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断 ...
- BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)
题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 假设平均数是x,且a1给an了k个(k<0说明是an给a1了-k个),那么总代价就 ...
- [HAOI2008]糖果传递 结论题
题目描述 有\(n(n<1000000)\)个小朋友坐成一圈,每人有\(a_i\)个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为\(1\),求使所有人糖果数相等的最小代价. 暴力 ...
- [BZOJ1045][HAOI2008] 糖果传递(数学相关)
题目描述 传送门 题目大意:有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.求使所有人获得均等糖果的最小代价. 题解 设第i个人会给第i+1个人 xi ...
- bzoj1045: [HAOI2008] 糖果传递
挺有趣的.观察题目环形?切掉一个跑贪心?O(n^2)超时了... 先计算m为每个最终糖果数量. 设An传给A1了k个糖果, 那么A1传给A2的糖果数为S1=k+A1-m,T1=A1-m 那么A2传给A ...
最新文章
- Django博客系统(推荐文章数据展示)
- 北航算法作业一 约瑟夫环问题
- 华为修改优先级命令_VOlTE指标设定(华为网管各种命令)
- 调制优缺点_钓鱼,何时用搓饵、何时用拉饵?及对应的优缺点分析
- 利用DBMS_FILE_TRANSFER传输数据库文件
- 基于并查集的kruskal算法
- 《C Traps and Pitfalls》 笔记
- 应用容器Application container
- Performance Tuning
- 但是的近义词是什么,怎么用但是造句?
- 使用 matlab 数字图像处理(九)—— 去卷积(deconvolution,逆滤波复原)
- Keras搭建M2Det目标检测平台(转载)
- STL之容器——介绍
- ARM学习日记--开发板的使用
- Map集合简单应用的例子(世界杯)
- 能快速修改视频格式的工具分享
- 根据出生年月日计算出生了多少年,多少月,多少天
- 倍福PLC Modbus通信区
- 从零开始学微信小程序开发:1
- python pandas 在现有excel中插入新数据
热门文章
- 阿里云中间件首席架构师李小平:云原生实践助力企业高效创新
- mPaaS 客户端问题排查之突如其来的“白屏”等待
- 一篇文章教会你使用html+css3制作GIF图
- “数据驱动”时代来临,阿里云数据中台如何赋能金融业?(附重磅报告下载)
- Java 的这些坑,你踩到了吗?
- 成都工业学院计算机工程学院院长,青春的交接礼——成都工业学院计算机工程学院...
- 同时渲染两个世界:恐怖游戏《灵媒》背后的尖端技术
- MySQL复习资料(二)——MySQL-DDL语句
- Linux从零开始(三、命令图解)
- 安装完Oracle 11g之后启动SQL Developer 时报cannot find a j2se sdk错误的解决办法