【[USACO12MAR]园林绿化Landscaping】
我旁边有一个暴力的金牌爷整天欺负我嘤嘤嘤
关我电脑,关我浏览器,还钦定我学不会贪心
没错我就是学不会了
这道题还是非常妙的
我们发现这个土的数量实在是少的可怜,于是我们甚至可以对每一个单位的土都进行贪心
分成两种情况考虑
当前的\(a_i<b_i\),我们还需要往这个位置补一些土,可能是从前面某一个位置拿一些过来,也有可能就是用\(x\)一个单位的代价往这个位置补
\(a_i>b_i\),我们需要去掉一些土,可能是将一些位置的土给拿过来,也有可能就是用\(y\)一个单位的代价往外丢
还有一条非常显然的性质
如果我们想将一些土从\(i\)运到\(j\),那么我们找一个中转点\(k\)(\(i<k<j\)),我们从\(i\)运到\(k\)在运到\(j\),和直接运到\(j\),并没有什么差别
这个非常显然啊,就是利用了这个距离的线性性
之后就可以利用两个堆来贪心了
对于第一种情况,我们利用一个堆来记录前面有哪些位置是土是多出来的,如果我们可以利用多出来的土运到这里使得比加一个价格为\(x\)单位的土更优的话我们就运,否则就直接加上这个\(x\)
如果将前面的运到这里的话,那么对原来的答案也会产生影响,因为能往后运土的点一定是原来土多出来的点,所以还要把原来的那个把土丢掉的花费减掉
所以放进堆里的时候就提前加上那个把土丢掉的花费就好了
之后还有一个地方我就写到注释里吧
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define re register
#define maxn 105
int X,Y,Z;
std::priority_queue<int> q1,q2;
int ans=0,n;
inline int read()
{
char c=getchar();
int x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
int main()
{
n=read(),X=read(),Y=read(),Z=read();
for(re int i=1;i<=n;i++)
{
int a=read(),b=read();
if(a<b)
{
for(re int j=1;j<=b-a;j++)
if(q1.empty()||i*Z-q1.top()>=X)
ans+=X,q2.push(i*Z+X);
else
{
int mid=q1.top();
q1.pop();
ans+=i*Z-mid;
q2.push(i*Z*2-mid);
//这里在上面不好说,干脆就放到注释里说吧
//首先尽管我们往这里补了一个土,土还是不够的,所以要放进第二个用来存土还没有满的堆
//之后如果这个位置继续往后传递到一个k位置的话,对答案的贡献应该是(k-pre)*z,也就是i只是一个中转点罢了,所以这里要放上还是要减掉算了两次的i*z
}
}
else
{
for(re int j=1;j<=a-b;j++)
if(q2.empty()||i*Z-q2.top()>=Y)
ans+=Y,q1.push(i*Z+Y);
else
{
int mid=q2.top();
q2.pop();
ans+=i*Z-mid;
q1.push(i*Z*2-mid);
}
}
}
std::cout<<ans;
return 0;
}
【[USACO12MAR]园林绿化Landscaping】的更多相关文章
- 5519: [Usaco2016 Open]Landscaping
农夫约翰正在建造一个美丽的花园,在这个过程中需要移动大量的泥土.花园由N个花圃(1≤N≤100,000)组成,第i个花圃最开始有Ai个泥土. 农夫约翰想要重新整理花园,使每个花圃最后有Bi个泥土.Ai ...
- 递归解析任意层的json
package com.sun.test; import java.util.Iterator; import net.sf.json.JSONArray;import net.sf.json.JSO ...
- 用JavaScript实现点击左侧列表右侧显示列表内容的方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 45.更新一下scrapy爬取工商信息爬虫代码
这里是完整的工商信息采集代码,不过此程序需要配合代理ip软件使用.问题:1.网站对ip之前没做限制,但是采集了一段时间就被检测到设置了反爬,每个ip只能访问十多次左右就被限制访问.2.网站对请求头的检 ...
- 联想K860 ROM 从官方Vibe 精简 提高性能
ROM介绍 从官方:根据官方Vibe 1403 6从编译版本 除去不想要的软件的一部分 自己Root权限最新版本Superuser 园林绿化导航虚拟按键 优化系统.更顺畅 提升游戏性能 优化自己主动调 ...
- 北漂IT男返乡2年的三线楼市观察(宜昌夷陵篇)-原创
一直想写点什么,这段时间总算有空,好嘞,正好有兴致来写一写楼市相关的文章以饕读者和粉丝朋友. 宜昌?说宜昌您可能不知道,但是说三峡大坝您就知道了 最近这两年,因为小宝的降临,我多半时间待在老家宜昌陪伴 ...
- 杨柳絮-Info:菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾”
ylbtech-杨柳絮-Info:菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾” 1.返回顶部 1. 菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾” 2019年04月09日 11:44 来源:大 ...
- 杨柳目-杨柳科-Info-新闻:让中国人焦虑的杨絮背后,隐藏着“拯救”北京的秘密!
ylbtech-杨柳目-杨柳科-Info-新闻:让中国人焦虑的杨絮背后,隐藏着“拯救”北京的秘密! 1.返回顶部 1. 春天来了,北京和其他很多城市满城飞絮的日子也到了.库叔作为敏感体质,不得不戴上口 ...
- 假期学习【九】首都之窗百姓信件爬取代码优化以及处理 2020.2.7 Python
今天对爬取程序进行了优化,修正了错误. 遇到了两个问题与错误: 1.忘记了对文件的读写设置格式,导致导入Hive数据库无法正常显示以及写入. 2.文件的读写操作有误导致数据量仅有应该有的1/2 不完整 ...
随机推荐
- JS实现最小生成树之普里姆(Prim)算法
最小生成树: 我们把构造连通网的最小代价生成树称为最小生成树.经典的算法有两种,普利姆算法和克鲁斯卡尔算法. 普里姆算法打印最小生成树: 先选择一个点,把该顶点的边加入数组,再按照权值最小的原则选边, ...
- golang学习之defer
golang中的defer通常用于执行一些资源释放性操作,比如open/close.connect/disconnect.lock/unlock等,对defer理解主要记住以下三点: 1.defer ...
- vscode 安装插件,和相关配置
安装插件,配置对应的用户设置,进行替换,实现插件功能的生效 { // 控制是否在搜索中跟踪符号链接. "search.followSymlinks": false, "e ...
- C# 学习笔记(一) Winform利用Assembly反射动态创建窗体
1. 添加Reflection //添加对Reflection程序集引用 using System.Reflection; // 引用窗体创建方法CreateForm,传入参数 private voi ...
- uestc 1709 Binary Operations 位运算的灵活运用
Binary Operations Time Limit: 2000 ms Memory Limit: 65535 kB Solved: 56 Tried: 674 Description B ...
- Generator函数自执行
Generator函数实现 function* gen(x){ var y = yield x + 2; return y } //1.调用g函数会返回一个内部的指针 var g = gen(1); ...
- Difference between scipy.fftpack and numpy.fft
scipy.fftpack 和 numpy.fft 的区别 When applying scipy.fftpack.rfft and numpy.fft.rfft I get the followin ...
- Latex表格太宽处理方法 (How to shorten Latex table length)
当表格太宽时, 为了能在页面中显示完整, 可以缩小表格, 或者横排.缩小表格的好处是, 不用倒转页面阅读, 坏处是原始宽度不同的表格, 被缩小后, 字体不一, 不美观. 虽然可以调整参数使得所有表格字 ...
- 比较和排序(IComparable和IComparer以及它们的泛型实现)(转)
C#笔记25:比较和排序(IComparable和IComparer以及它们的泛型实现) 本文摘要: 1:比较和排序的概念: 2:IComparable和IComparer: 3:IComparabl ...
- Oracle 完整性约束错误
错误Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch upd ...