[BZOJ1492] [NOI2007]货币兑换Cash 斜率优化+cdq/平衡树维护凸包
1492: [NOI2007]货币兑换Cash
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 5907 Solved: 2377
[Submit][Status][Discuss]
Description
.png)
.png)
Input
Output
只有一个实数MaxProfit,表示第N天的操作结束时能够获得的最大的金钱数目。答案保留3位小数。
Sample Input
1 1 1
1 2 2
2 2 3
Sample Output
HINT
.png)
Source
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define eps 1e-9
#define maxn 120000
#define inf 2147483647
using namespace std;
struct P {
double x,y;
}p[maxn],pp[maxn];
bool operator <(P t1,P t2){return (t1.x<t2.x+eps)||(fabs(t1.x-t2.x)<=eps&&t1.y<t2.y+eps);}
struct data {
double q,a,b,rate,k;
int pos;
}ask[maxn],askt[maxn];
int n;
double f[maxn];
bool cmp(data t1,data t2) {return t1.k<t2.k;}
double get(int i,int j) {
if(!i) return -inf;
if(!j) return inf;
if(fabs(p[i].x-p[j].x)<=eps) return -inf;
return (p[i].y-p[j].y)/(p[i].x-p[j].x);
}
int sta[maxn];
void cdq(int l,int r) {
if(l==r) {
f[l]=max(f[l-],f[l]);
p[l].y=f[l]/(ask[l].a*ask[l].rate+ask[l].b);
p[l].x=p[l].y*ask[l].rate;
return;
}
int mid=l+r>>,l1=l,l2=mid+;
for(int i=l;i<=r;i++)
if(ask[i].pos<=mid) askt[l1++]=ask[i];
else askt[l2++]=ask[i];
for(int i=l;i<=r;i++) ask[i]=askt[i];
cdq(l,mid);
int top=;
for(int i=l;i<=mid;i++) {
while(top>=&&get(i,sta[top])+eps>get(sta[top],sta[top-])) top--;
sta[++top]=i;
}
int j=;
for(int i=r;i>=mid+;i--) {
while(j<top&&ask[i].k<get(sta[j],sta[j+])+eps) j++;
f[ask[i].pos]=max(f[ask[i].pos],p[sta[j]].x*ask[i].a+p[sta[j]].y*ask[i].b);
}
cdq(mid+,r);
l1=l,l2=mid+;
for(int i=l;i<=r;i++) {
if((p[l1]<p[l2]||l2>r)&&l1<=mid) pp[i]=p[l1++];
else pp[i]=p[l2++];
}
for(int i=l;i<=r;i++) p[i]=pp[i];
}
int main() {
scanf("%d%lf",&n,&f[]);
for(int i=;i<=n;i++) {
scanf("%lf%lf%lf",&ask[i].a,&ask[i].b,&ask[i].rate);
ask[i].k=-ask[i].a/ask[i].b;ask[i].pos=i;
}
sort(ask+,ask+n+,cmp);
cdq(,n);
printf("%.3lf\n",f[n]);
}
[BZOJ1492] [NOI2007]货币兑换Cash 斜率优化+cdq/平衡树维护凸包的更多相关文章
- [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5838 Solved: 2345[Submit][Sta ...
- BZOJ 1492: [NOI2007]货币兑换Cash 斜率优化 + splay动态维护凸包
Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...
- 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治
[BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...
- BZOJ1492: [NOI2007]货币兑换Cash 【dp + CDQ分治】
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MB Submit: 5391 Solved: 2181 [Submit][S ...
- 【BZOJ 1492】 [NOI2007]货币兑换Cash 斜率优化DP
先说一下斜率优化:这是一种经典的dp优化,是OI中利用数形结合的思想解决问题的典范,通常用于优化dp,有时候其他的一些决策优化也会用到,看待他的角度一般有两种,但均将决策看为二维坐标系上的点,并转化为 ...
- BZOJ.1492.[NOI2007]货币兑换(DP 斜率优化 CDQ分治/Splay)
BZOJ 洛谷 如果某天能够赚钱,那么一定会在这天把手上的金券全卖掉.同样如果某天要买,一定会把所有钱花光. 那么令\(f_i\)表示到第\(i\)天所拥有的最多钱数(此时手上没有任何金券),可以选择 ...
- 洛谷P4027 [NOI2007]货币兑换(dp 斜率优化 cdq 二分)
题意 题目链接 Sol 解题的关键是看到题目里的提示... 设\(f[i]\)表示到第\(i\)天所持有软妹币的最大数量,显然答案为\(max_{i = 1}^n f[i]\) 转移为\(f_i = ...
- [BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化)
[BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化) 题面 分析 dp方程推导 显然,必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币:每次卖出操作卖出所有 ...
- bzoj1492[NOI2007]货币兑换Cash cdq分治+斜率优化dp
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5541 Solved: 2228[Submit][Sta ...
随机推荐
- 漫谈单点登录(SSO)
1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...
- 页面加载时给的子元素的第一个元素加class
HTML代码: <div id="xiao"> <ul> <li></li> </ul> </div> js ...
- (转)Foundation-性能优化之NSDateFormatter
性能优化之NSDateFormatter 为什么要优化NSDateFormatter? 首先,过度的创建NSDateFormatter用于NSDate与NSString之间转换,会导致App卡顿,打开 ...
- sqoop工具从oracle导入数据2
sqoop工具从oracle导入数据 sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 ...
- 【bzoj2326】[HNOI2011]数学作业 矩阵乘法
题目描述 题解 矩阵乘法 考虑把相同位数的数放到一起处理: 设有$k$位的数为$[l,r]$,那么枚举从大到小的第$i$个数(即枚举$r-i+1$),考虑其对$Concatenate(l..r)$的贡 ...
- [洛谷P3413]SAC#1 - 萌数
题目大意:求$[l,r](0\leqslant l<r< 10^{1001})$中存在长度至少为$2$的回文串的数字数 题解:数位$DP$,发现如果有回文串,若长度为偶数,一定有两个相同的 ...
- 种树 by yoyoball [树分块+bitset]
题面 给定一棵树,有点权 每次询问给出一些点对,求这些点对之间的路径的并集上不同权值的个数,以及这些权值的$mex$ 思路 先考虑只有一对点对,只询问不同权值个数的问题:树上莫队模板题 然后加个$me ...
- GDI+小例子
原文链接地址:http://www.cnblogs.com/chuanzifan/archive/2011/11/26/2264507.html 1.在stdafx.h中 #include <G ...
- [zhuan]Android安全讲座第九层(二) 内存dump
http://sunzeduo.blog.51cto.com/2758509/1409450 近来android上越来越多的应用对自身的保护机制加强了重视,主要表现在几个方面. 1 dex加壳 2 s ...
- 2015年网易校招Java开发工程师(技术架构)在线笔试题
1. 程序和进程的本质区别是? A.在外存和内存存储 B.非顺序和顺序执行机器指令 C.独占使用和分时使用计算机资源 D.静态和动态特征 参考答案分析: 进程与应用程序的区别: 进程(Process ...