【[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 不完整 ...
随机推荐
- RabbitMQ入门教程系列
https://blog.csdn.net/column/details/18247.html
- golang操作mysql数据库
golang操作mysql数据库 代码: mysql的增.删.改.查 package main import ( "database/sql" "fmt" &q ...
- 一个JNI的helloworld小demo
最近想学习一下jni,在网上看了一些demo,自己也操作了一遍,首先我将我自己学习的demo网站贴出来:https://blog.csdn.net/lwcloud/article/details/78 ...
- 腾讯企业邮箱报错 "smtp.exmail.qq.com"port 465, isSSL false
一.报错 "smtp.exmail.qq.com" port 465, isSSL false 通过网上搜索查询一些资料,推测是邮箱的配置出问题了. 二.修改邮箱配置 // 创建属 ...
- java使用lock实现一个简单的死锁程序
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public ...
- JMM和底层实现原理
- HTTP完整请求过程
重要申明:感谢原文作者——沐风的心,想看原文请戳这里!我借鉴了原文的页面请求流程,原文见时序图之后正文. 重要申明:感谢原文作者——一行两行,想看原文请戳这里!我借鉴了原文的完整HTTP请求流程. 增 ...
- JavaMail获取已发送邮件
public static void main(String args[]) { Properties props = new Properties(); // 参数配置 props.setPrope ...
- 使用admin lte 碰到访问Google字体的问题
下载了admin lte 的模板,运行的时候,发现很慢,看了一下console,发现adminlte.css里有import google的字体文件,众所周知的原因,无法访问,所以网页很慢,没办法,只 ...
- [SCOI2009]粉刷匠
线性DP预处理+分组背包 首先设dp[i][j][0/1]表示该木板前i个格刷了j次且最后一次颜色为0/1的最大正确数 做下0/1的前缀和然后转移状态 dp[i][j][k]=max(dp[l][j] ...