HDU 6438Buy and Resell
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438
又是维护一个堆,然后搞搞维护的题,赛场上队友一蛤就A掉了,我还是菜
我们维护一个小根堆,维护3个信息,那天的卖价,是否已经跟别人交换过,那天
我们考虑一个新的物品跟小根堆的堆顶比较,如果新物品比堆顶还小,说明交易亏本,直接丢入堆中,否则就交易,如果堆顶的元素是已经跟之前交易过的,那么就相当于当前物品和之前那个交易,然后堆顶就变成没有交易了,继续插入堆中,交换次数不变,如果堆顶是没有交易过的,那么就交易,交易次数+2.我们希望交换次数尽可能的小,那么价值相同是,已经交换过得就有限辣
#include<cstdio>
#include<algorithm>
#include<queue>
#define maxl 100010using namespace std;int n;
int a[maxl],frm[maxl];
long long ans,swp;
typedef pair<int,bool> p;
typedef pair<p,int> node;
priority_queue<node,vector<node>,greater<node> > q;
bool in[maxl];inline void prework()
{ans=0;swp=0;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),in[i]=true;while(!q.empty())q.pop();
}inline void mainwork()
{p d;node dd;for(int i=1;i<=n;i++){if(q.empty())q.push(make_pair(make_pair(a[i],true),i));else{dd=q.top();d=dd.first;if(d.first>=a[i])q.push(make_pair(make_pair(a[i],true),i));else{q.pop();if(!in[dd.second]){ans+=a[i]-d.first;in[i]=false;in[dd.second]=true;frm[i]=frm[dd.second];frm[dd.second]=0;q.push(make_pair(make_pair(a[dd.second],true),dd.second));q.push(make_pair(make_pair(a[i],false),i));}else{ans+=a[i]-d.first;swp+=2;in[i]=false;in[dd.second]=false;frm[i]=dd.second;q.push(make_pair(make_pair(a[i],false),i));}} }}
}inline void print()
{printf("%lld %lld\n",ans,swp);
}int main()
{int t;scanf("%d",&t);for(int i=1;i<=t;i++){prework();mainwork();print();}return 0;
}
HDU 6438Buy and Resell相关推荐
- 怎么提取pdf中的表格数据_如何从pdf第1部分中提取表格数据
怎么提取pdf中的表格数据 In this article, we talk about the challenges and principles of extracting tabular dat ...
- HDU 6438 Buy and Resell【贪心】
http://acm.hdu.edu.cn/showproblem.php?pid=6438 Problem Description The Power Cube is used as a stash ...
- Buy and Resell HDU - 6438(补)更新贪心
The Power Cube is used as a stash of Exotic Power. There are nn cities numbered 1,2,-,n1,2,-,n where ...
- HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解
思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...
- Buy and Resell HDU - 6438 贪心
题目描述: 有一个物品,给你这个物品n天的价格,你可以在在第i天买进或卖出或者什么都不做,如何获得最大利益,假设本金是无限大的. 分析: 我们建立一个最小堆,即优先队列,每天,将队列的最小值和当前的值 ...
- HDU - 6438 Buy and Resell(思维+ 贪心)
题目链接 题意 t组输入,每组n个城市,给出每个城市的货物的价格,在每个城市可以进行三个操作:购买货物,卖出货物,不做操作,问从城市1到城市n(不能返回)最多能获得多少利润,且操作数最少(买和卖分别算 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
最新文章
- java jar 是什么文件_jar文件怎么打开?jar文件是什么?
- 2、Reactive Extensions for .NET(译)
- 安装 VMware Tools 实现窗口 自适应 及 主机与虚拟机之间复制粘贴
- 轻量级的日期时间控件Pikaday
- 点击率预估算法:FM与FFM
- 【HDU - 3172】Virtual Friends(带权并查集--权为集合元素个数)
- 25岁“天才少年”曹原再发一篇Nature!1个月时间内的第二篇!
- javaScript输出指定的时间格式
- [转]Linux线程同步之条件变量
- C#实现实时监控文件目录下的变化
- 汇编语言-学习笔记(一)
- Django 学习第九天——请求与响应
- java batik_java – 如何在Batik SVG库中使用自定义字体?
- 计算机wifi共享怎么设置,笔记本电脑设置wifi热点共享教程
- 破解justinmind方法,简单有效
- 计算机网络实验(三个部分--验证性、Wireshark、CPT)
- shell插入多行文本
- NATS中文开发文档:连接
- pycharm光标变成黑框,恢复成竖线
- Java基础知识提炼与总结