【JZOJ5043】【NOI2017模拟4.4】保持平衡
来源:互联网 发布:网络女作家收入排行榜 编辑:程序博客网 时间:2024/05/18 02:43
Description
博爱路上种起了一棵棵的大树,但是有一些地方的树超过了负荷,有一些地方的树的数量又不够。
我们不妨把博爱路看做一条数轴,数轴有n个点,从1到n编号,第i个位置原来现在有ai棵树,这个位置的需求是bi棵树。ai,bi都是0到10的整数。由于你需要是这个位置的树的数量保持平衡,所以你需要移除或者搬一些树过来。
我们怎么使树的数量平衡呢?
首先,你可以从某个位置i移动一棵树到位置j,这时,你需要的运费是|i-j|*z元。
其次,你可以从商店买一棵树,需要支付x元,这时商店会把树配送到任意位置。
还有就是,你可以叫别人收购在任意位置一棵树,需要支付y元运费。
问使得树的数量平衡最小需要支付多少钱?
Data Constraint
Solution
这是一道用堆维护的神奇题目。
我们考虑从前往后做,那运送的费用就拆解为i* z-j*z,我们将i *z,-j*z分别寄存在i和j上。维护两个堆f,f1分别表示多出树的堆和少树的堆。我们这里只讨论少树的情况。对于少树,我们从堆f中取出一个最小值,假如它比y小,就说明把以前的树移过来划算,我们就把它加入答案,并把它踢出堆,否则就说明当前代价还不如自己去买棵树划算,就把y加入答案。设你假如答案的数为t,那么为了考虑到将来有可能撤销这次操作,我们就将-i*z-t加入到堆f1。
Code
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#include<queue>#define ll long longusing namespace std;struct code{ ll a; bool friend operator < (code x,code y){ return !(x.a<y.a); }}g,g1;priority_queue<code>f,f1;ll n,x,y,z,p,q,i,t,j,k,l,ans;int main(){ freopen("data.in","r",stdin);//freopen("balance.out","w",stdout); scanf("%lld%lld%lld%lld",&n,&x,&y,&z); for (i=1;i<=n;i++){ scanf("%lld%lld",&p,&q); p-=q; while (p>0){ if (!f.empty()){ g=f.top(); if (i*z+g.a<y) t=i*z+g.a,f.pop(); else t=y; }else t=y; g1.a=-i*z-t,f1.push(g1); ans+=t; p--; } while (p<0){ if (!f1.empty()){ g=f1.top(); if (i*z+g.a<x) t=i*z+g.a,f1.pop(); else t=x; }else t=x; g1.a=-i*z-t,f.push(g1); ans+=t; p++; } } printf("%lld\n",ans);}
1 0
- 【JZOJ5043】【NOI2017模拟4.4】保持平衡
- jzoj5043 【NOI2017模拟4.4】保持平衡 (可撤销贪心)
- 【NOI2017模拟4.4】保持平衡
- 5043. 【NOI2017模拟4.4】保持平衡
- JZOJ 5043. 【NOI2017模拟4.4】保持平衡
- 【jzoj5043】【保持平衡】【数据结构】
- 【NOI2017模拟4.4】保持平衡【优先队列,贪心】
- [JZOJ5044]【NOI2017模拟4.4】Sone0
- 【NOI2017模拟4.4】最小直径
- jzoj 5015. 【NOI2017模拟3.15】决斗 贪心+平衡树
- NOI2017模拟3.1 总结
- NOI2017模拟3.8 总结
- 【NOI2017模拟3.30】原谅
- 【NOI2017模拟4.2】查询
- 【NOI2017模拟4.2】押韵
- 【NOI2017模拟6.26】A
- 【NOI2017模拟6.29】呵呵
- 【NOI2017模拟6.2】字符串
- Power of Four问题及解法
- MFC学习总结 (67个技巧)
- Android 开发中我常用的手机App(持续更新)
- ch6.1 data.table 基础
- STL之set的基本用法
- 【JZOJ5043】【NOI2017模拟4.4】保持平衡
- ubuntu下安装flash
- 简单的jquery拖拽排序效果(转载)
- OpenCV检测篇(二)——笑脸检测
- HDU1016 Prime Ring Problem
- android studio升级至2.3后运行app,在手机上没有自己启动
- A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束
- 【敏捷开发每日一贴】:猪和鸡的故事
- [BBED]Oracle 11.2.0.4 Centos6.5下编译bbed