bzoj1492 斜率优化|cdq分治
#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分治的更多相关文章
- BZOJ_3963_[WF2011]MachineWorks_斜率优化+CDQ分治
BZOJ_3963_[WF2011]MachineWorks_斜率优化+CDQ分治 Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM) ...
- [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5838 Solved: 2345[Submit][Sta ...
- 【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 3396 Solved: 1434[Submit][Sta ...
- bzoj1492/luogu4027 货币兑换 (斜率优化+cdq分治)
设f[i]是第i天能获得的最大钱数,那么 f[i]=max{在第j天用f[j]的钱买,然后在第i天卖得到的钱,f[i-1]} 然后解一解方程什么的,设$x[j]=\frac{F[j]}{A[j]*Ra ...
- 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治
[BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...
- 洛谷.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_ ...
- BZOJ3963 WF2011MachineWorks(动态规划+斜率优化+cdq分治)
按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器. ...
- [Noi2014]购票 BZOJ3672 点分治+斜率优化+CDQ分治
Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的 ...
- 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治
[BZOJ2726][SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若 ...
随机推荐
- QC在win7下不能访问QC服务器介绍
本地访问不了服务器QC的主要几个原因总结 服务器serverjbossextensionhpcmd 2016-03-24 兼容性问题: 1.在服务端QC的安装目录下jboss\server\def ...
- hibernate.cfg.xml常见配置
转载自:http://blog.csdn.net/qiaqia609/article/details/9456489 <!--标准的XML文件的起始行,version='1.0'表明XML的版本 ...
- [LeetCode] Valid Number 验证数字
Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...
- Html-浅谈如何正确给table加边框
一般来说,给表格加边框都会出现不同的问题,以下是给表格加边框后展现比较好的方式 <style> table,table tr th, table tr td { border:1px so ...
- java日志学习笔记
一.日志家族 Log4j一开始就很强大,在jdk自带日志系统之前,apache就曾经尝试把log4j划为java的一部分,不知为何没能成功,sun还是用了自己很弱的日志系统.为了兼容各个日志系统,ap ...
- Android---观察者模式的简单实现demo
ObserverListerner: subjectListener: 观察者管理类: 使用方法: 1. 接口: 2. 注册观察者: 3. 通知:(触发事件执行): 4. 实现方法:(都要写, 只在要 ...
- navicat注册码
1. navicat for mysql 9 注册码 ::: NAVL-EHNC-7N7P-W6GM 2. navicat for mysql 9.17中文版 注册码 :: NAVM-5ZC ...
- xamarin.forms uwp app部署到手机移动设备进行测试,真机调试(device portal方式部署)
最近学习xamarin.刚好 手上有一个lumia 930.所以试一试把uwp app部署到手机上,并真机调试一把. 目前环境: 1.开发pc电脑是win10,版本1607.加入了insider,所以 ...
- 用EmEditor实现PDF转Word后的对齐排版
Redraw = false//禁止重绘(类似于VBA中的: Application.screenupdating=FALSE),以提高运行效率 //去除所有空行和只由空白字符构成的行 documen ...
- error: failed to push some refs to 'https://github.com/github账号/learn_git.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caus
在使用git 对源代码进行push到gitHub时可能会出错,信息如下 此时很多人会尝试下面的命令把当前分支代码上传到master分支上. $ git push -u origin master ...