#include <stdio.h>
#include <bitset>
#include <string.h>
#include <stack>
#include <algorithm>
#include <iostream>
#include <set>
#include <map>
#include <math.h>
#include <queue>
#include <complex>
using namespace std ;
typedef long long ll ;
typedef long double ld ;
typedef unsigned long long ull ;
#ifdef _WIN32
#define LLD "%I64d"
#else
#define LLD "%lld"
#endif
#define pi (acos(-1.0))
#define fi first
#define se second
#define lson (o<<1),l,mid
#define rson (o<<1|1),mid+1,r
#define MP make_pair
#define sqr(x) ((x)*(x))
#define ALL(v) (v).begin(),(v).end()
#define showtime fprintf(stderr,"time = %.15f\n",clock() / (double)CLOCKS_PER_SEC)
const double eps = 1e-;
const int inf = 0x3f3f3f3f ;
const ll INF = (ll)4e18 ;
const int MOD=(int)1e9+,BAS=,invBAS=;
int sign(double x){return x<-eps?-:x>eps;} const int M = ;
struct Point {
int id ;
double a,b,rate,x,y ;
inline void minus (Point t) {
x-=t.x ; y-=t.y ;
}
inline double mul (Point t) {
return x*t.y-y*t.x ;
}
inline bool operator < (const Point &t) {
if (sign(x-t.x)==) return y>t.y ;
return x<t.x ;
}
} p[M] , c[M] ;
int n , st[M] , sz ;
double money[M] ; double slope (Point e,Point t,Point g) {
e.minus(g) ; t.minus(g) ;
return sign(t.mul(e))<= ;
} double get (int i,int j) {
return p[i].x*p[j].b+p[i].y*p[j].a ;
} void cdq (int l,int r) {
if (l == r) {
money[l] = max(money[l-],money[l]) ;
p[l].x = money[l]/(p[l].a*p[l].rate+p[l].b) ;
p[l].y = p[l].x*p[l].rate ;
return ;
}
int mid = l+r>> ;
for (int i=l,j=,k=; i<=r ; i ++)
if (p[i].id<=mid) c[l+j++] = p[i] ;
else c[mid+k++] = p[i] ;
memcpy (p+l,c+l,sizeof(Point)*(r-l+)) ;
cdq (l,mid) ;
sz = ;
for (int i=l ; i<=mid ; i++) {
if (sz && sign(p[st[sz-]].x-p[i].x)==) continue ;
while (sz>&&slope(p[st[sz-]],p[st[sz-]],p[i]))sz --;
st[sz++] = i ;
}
for (int i=mid+ ; i<=r ; i++) {
while (sz> && sign(get(st[sz-],i)-get(st[sz-],i))>) sz -- ;
money[p[i].id] = max (money[p[i].id] , get(st[sz-],i)) ;
}
cdq (mid+,r) ;
int e=l , t=mid+ ;
for (int i=l ; i<=r ; i++)
if (e<=mid && (t>r || p[e]<p[t])) c[i] = p[e++] ;
else c[i] = p[t++] ;
memcpy(p+l,c+l,sizeof(Point)*(r-l+)) ;
} bool cmp (const Point &e , const Point &t) { return e.b*t.a>t.b*e.a ; } int main () {
scanf ("%d%lf" , &n , money) ;
for (int i= ; i<n ; i ++) {
scanf ("%lf%lf%lf" , &p[i].a,&p[i].b,&p[i].rate);
p[i].id = i ;
}
sort (p,p+n,cmp) ;
cdq (,n-) ;
printf ("%.3f\n" , money[n-]) ;
return ;
}

bzoj1492 斜率优化|cdq分治的更多相关文章

  1. BZOJ_3963_[WF2011]MachineWorks_斜率优化+CDQ分治

    BZOJ_3963_[WF2011]MachineWorks_斜率优化+CDQ分治 Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM) ...

  2. [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 5838  Solved: 2345[Submit][Sta ...

  3. 【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 3396  Solved: 1434[Submit][Sta ...

  4. bzoj1492/luogu4027 货币兑换 (斜率优化+cdq分治)

    设f[i]是第i天能获得的最大钱数,那么 f[i]=max{在第j天用f[j]的钱买,然后在第i天卖得到的钱,f[i-1]} 然后解一解方程什么的,设$x[j]=\frac{F[j]}{A[j]*Ra ...

  5. 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治

    [BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...

  6. 洛谷.4655.[CEOI2017]Building Bridges(DP 斜率优化 CDQ分治)

    LOJ 洛谷 \(f_i=s_{i-1}+h_i^2+\min\{f_j-s_j+h_j^2-2h_i2h_j\}\),显然可以斜率优化. \(f_i-s_{i-1}-h_i^2+2h_ih_j=f_ ...

  7. BZOJ3963 WF2011MachineWorks(动态规划+斜率优化+cdq分治)

    按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器. ...

  8. [Noi2014]购票 BZOJ3672 点分治+斜率优化+CDQ分治

    Description  今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的 ...

  9. 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治

    [BZOJ2726][SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若 ...

随机推荐

  1. [收藏] javascript keycode大全

    做了一段的小练习,没往上发了~ 继续补下js的基础知识 ------------------------------------------------------------------------ ...

  2. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  3. AC日记——丑数 codevs 1246

    1246 丑数 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 对于一给定的素 ...

  4. WinForm TreeView递归加载

    这个其实通俗一点讲就是的树状分支图 首先利用递归添加数据 数据放入 treeView1.Nodes.Add() 中 public Form3() { InitializeComponent(); Tr ...

  5. mysql workbench如何把已有的数据库导出ER模型

    mysql workbench的特长是创建表结构的,然后在结构图中,圈圈点点,很容易就利用可视化方式把数据库建好,然后再导入到数据库服务器中,这种办法很效率.但是有时我们有一个需求,事先没有建表结构模 ...

  6. 编写轻量ajax组件03-实现(附源码)

    前言 通过前两篇的介绍,我们知道要执行页面对象的方法,核心就是反射,是从请求获取参数并执行指定方法的过程.实际上这和asp.net mvc框架的核心思想很类似,它会解析url,从中获取controll ...

  7. WebApp 九宫格抽奖简易demo

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...

  8. lumia手机wp系统应用列表如何设置按照拼音

    1.安装应用多了就会这样·· 2.想用拼音排列,请把系统设置里的区域语言中的区域和格式改为中国,此时,屏幕壁纸上是"四月十五日". 3.想用笔画排列,请把系统设置里的区域语言中的区 ...

  9. root与普通用户的切换

    普通用户切换到root用户:sudo su - root用户切换到普通用户:su henie

  10. 星型数据仓库olap工具kylin介绍

    星型数据仓库olap工具kylin介绍 数据仓库是目前企业级BI分析的重要平台,尤其在互联网公司,每天都会产生数以百G的日志,如何从这些日志中发现数据的规律很重要. 数据仓库是数据分析的重要工具, 每 ...