我旁边有一个暴力的金牌爷整天欺负我嘤嘤嘤

关我电脑,关我浏览器,还钦定我学不会贪心

没错我就是学不会了

这道题还是非常妙的

我们发现这个土的数量实在是少的可怜,于是我们甚至可以对每一个单位的土都进行贪心

分成两种情况考虑

  1. 当前的\(a_i<b_i\),我们还需要往这个位置补一些土,可能是从前面某一个位置拿一些过来,也有可能就是用\(x\)一个单位的代价往这个位置补

  2. \(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】的更多相关文章

  1. 5519: [Usaco2016 Open]Landscaping

    农夫约翰正在建造一个美丽的花园,在这个过程中需要移动大量的泥土.花园由N个花圃(1≤N≤100,000)组成,第i个花圃最开始有Ai个泥土. 农夫约翰想要重新整理花园,使每个花圃最后有Bi个泥土.Ai ...

  2. 递归解析任意层的json

    package com.sun.test; import java.util.Iterator; import net.sf.json.JSONArray;import net.sf.json.JSO ...

  3. 用JavaScript实现点击左侧列表右侧显示列表内容的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 45.更新一下scrapy爬取工商信息爬虫代码

    这里是完整的工商信息采集代码,不过此程序需要配合代理ip软件使用.问题:1.网站对ip之前没做限制,但是采集了一段时间就被检测到设置了反爬,每个ip只能访问十多次左右就被限制访问.2.网站对请求头的检 ...

  5. 联想K860 ROM 从官方Vibe 精简 提高性能

    ROM介绍 从官方:根据官方Vibe 1403 6从编译版本 除去不想要的软件的一部分 自己Root权限最新版本Superuser 园林绿化导航虚拟按键 优化系统.更顺畅 提升游戏性能 优化自己主动调 ...

  6. 北漂IT男返乡2年的三线楼市观察(宜昌夷陵篇)-原创

    一直想写点什么,这段时间总算有空,好嘞,正好有兴致来写一写楼市相关的文章以饕读者和粉丝朋友. 宜昌?说宜昌您可能不知道,但是说三峡大坝您就知道了 最近这两年,因为小宝的降临,我多半时间待在老家宜昌陪伴 ...

  7. 杨柳絮-Info:菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾”

    ylbtech-杨柳絮-Info:菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾” 1.返回顶部 1. 菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾” 2019年04月09日 11:44  来源:大 ...

  8. 杨柳目-杨柳科-Info-新闻:让中国人焦虑的杨絮背后,隐藏着“拯救”北京的秘密!

    ylbtech-杨柳目-杨柳科-Info-新闻:让中国人焦虑的杨絮背后,隐藏着“拯救”北京的秘密! 1.返回顶部 1. 春天来了,北京和其他很多城市满城飞絮的日子也到了.库叔作为敏感体质,不得不戴上口 ...

  9. 假期学习【九】首都之窗百姓信件爬取代码优化以及处理 2020.2.7 Python

    今天对爬取程序进行了优化,修正了错误. 遇到了两个问题与错误: 1.忘记了对文件的读写设置格式,导致导入Hive数据库无法正常显示以及写入. 2.文件的读写操作有误导致数据量仅有应该有的1/2 不完整 ...

随机推荐

  1. java读取项目或包下面的属性文件方法

    1.使用java.util.Properties类的load()方法 //文件在项目下.不是在包下!! InputStream in = new BufferedInputStream(newFile ...

  2. java中程序上线报错: tomcat中java.lang.OutOfMemoryError: PermGen space

    在程序测试没问题之后,上线试运行,在运行的过程中某个功能一点击就报如下错,然后重启服务器就好了,一会又是如此,解决方法如下(亲测) PermGen space的全称是Permanent Generat ...

  3. 关于html 中form表单的内标签和使用

    表单标记 1.普通文本框: <input type=”text” name=”名称” value=”值”;不写value默认为空/> 2.密码框:<input type=”passw ...

  4. UOJ#414. 【APIO2018】新家

    传送门 首先二分答案 \(mid\),问题变成求区间 \([l-mid,r+mid]\) 在该年份的不同类型个数为 \(k\) 关于年份的限制可以离线下来 现在的问题就是区间数颜色,一个套路就是维护每 ...

  5. 分数规划(Bzoj1486: [HNOI2009]最小圈)

    题面 传送门 分数规划 分数规划有什么用? 可以把带分数的最优性求解式化成不带除发的运算 假设求max{\(\frac{a}{b},b>0\)} 二分一个权值\(k\) 令\(\frac{a}{ ...

  6. luogu P2801 教主的魔法

    题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...

  7. express中间件笔记整理

    expressexpress概念:express是基于nodejs的HTTPS模块构建出来的一个web应用开发框架,在nodejs之上扩展了 Web 应用所需的基本功能.本质上express应用就是调 ...

  8. 微服务实战(三):以MySQL为例,从原理上理解那些所谓的数据库军规

    原文链接:微服务化的数据库设计与读写分离(来源:刘超的通俗云计算) 数据库永远是应用最关键的一环,同时越到高并发阶段,数据库往往成为瓶颈,如果数据库表和索引不在一开始就进行良好的设计,则后期数据库横向 ...

  9. 常用的自动化测试框架及测试框架的发展(Alpha)

    前言:自动化测试在过去的20年已经有了很大的发展.最初的测试工具只提供了简单的捕捉/回访功能,维护性较差.而且脚本工具实现需要很强的开发技术和经验,而且数量众多的测试脚本加上没有文档记录因此维护起来较 ...

  10. windows&cmd常用命令&快捷键

    1: cls即CLear Screen 功能:清除屏幕上的所有显示 2:Win+Tab快捷键进行3D窗口切换还有比较快速切换窗口的新方法. 3:利用Alt+Tab快捷键进行切换窗口时,在桌面中间会显示 ...