【学习笔记】贪心好题!
时间:2019-09-18
本文章向大家介绍【学习笔记】贪心好题!,主要包括【学习笔记】贪心好题!使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这是一篇持续更新的博客。
不废话了直接上题吧。
1.洛谷 P2512 糖果传递
有n个小朋友坐成一圈,每人有Ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。求使所有人获得均等糖果的最小代价。
题解:最终结果可以计算,记为S。
我们假设所有传递都是向左传递(有向右的自然成为负数),设每个人的传递数量是Ki,这样便于统计。
那么对于第i个小朋友,他最后的糖果数量就是 Ai-Ki+Ki+1。这个数值等于S。
可以列出n个方程。
S=A1-K1+K2 移向得 K2=S-A1+K1。
S=A2-K2+K3 代换得 K3=S-A2+K2=S-A2+S-A1+K1=2*S-A1-A2+K1。
依次代换下去,可以得到第n个方程是Kn=n*S-A1-A2-…-An+K1。
设Ci=Ai-S。
K2=K1-C1
K3=K1-C2
所以我们传递数量的总和就变成了|K1|+|K1-C1|+…+|K1-Cn-1|.
可以抽象成一个数轴,上面有K1 C1 C2 C3 … Cn-1这n个点。取其中一个点使得所有距离尽可能近。
答案在中位数取到,于是就可以轻松的AC了。
1 #include<bits/stdc++.h> 2 using namespace std; 3 long long n,a[1000001],k[1000001],sum,ans; 4 int main() 5 { 6 scanf("%lld",&n); 7 for(int i=1;i<=n;i++) 8 { 9 scanf("%lld",&a[i]); 10 sum+=a[i]; 11 } 12 sum/=n; 13 for(int i=1;i<=n;i++) 14 { 15 k[i]=k[i-1]-a[i]+sum; 16 } 17 sort(k+1,k+n+1); 18 int mid=k[(n+1)/2]; 19 for(int i=1;i<=n;i++) 20 { 21 ans+=abs(k[i]-mid); 22 } 23 printf("%lld",ans); 24 return 0; 25 }
原文地址:https://www.cnblogs.com/Rakan-LoveJ/p/11543370.html
- 纳税服务系统四(角色模块)【角色与权限、角色与用户】
- 纳税服务系统五(登陆与系统拦截)【配置系统、子系统首页、登陆与拦截】
- 纳税服务系统六(信息发布管理模块)【Ueditor、异步信息交互、抽取BaseService、条件查询、分页】
- 纳税服务系统七(投诉管理模块)【显示投诉信息、处理回复、我要投诉、Quartz自动受理、统计图FusionCharts】
- Unikernel初体验
- Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、
- Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- Kafka的生产者和消费者代码解析
- Caused by: java.lang.ClassNotFoundException: backtype.storm.topology.IRichSpout
- 作为完美主义者(强迫症)如何将linux的eth1网卡修改为eth0网卡
- 【入门篇】一个小白在Jetson TX2上安装caffe的踩坑之旅
- 【入门篇】Jetson TX2深度学习Inference初体验
- zeromq的安装,部署(号称最快的消息队列,消息中间件)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法