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个任务被分成若 ...
随机推荐
- hdu2588 GCD (欧拉函数)
GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数. (文末有题) 知 ...
- 撸一段 SQL ? 还是撸一段代码?
记得刚入公司带我的研发哥们能写一手漂亮的 SQL,搜索准确.执行快.效率高. 配合Web项目中的查询展示数据的需求,基本是分分钟完成任务. 那段时间基本是仰视的态度,每天都去讨教一点手写 SQL 的要 ...
- NPOI操作EXCEL(五)——含合并单元格复杂表头的EXCEL解析
我们在第三篇文章中谈到了那些非常反人类的excel模板,博主为了养家糊口,也玩命做出了相应的解析方法... 我们先来看看第一类复杂表头: ...... 博主称这类excel模板为略复杂表头模板(蓝色部 ...
- 【C#】toString("Format") 格式化
1..ToString("P");//得到小数点后2位的百分比,自动 加上%号;//9512.35% 这个比较厉害! furenjun yoolonet
- css:子元素div 上下左右居中方法总结
最近在面试,不停地收到了知识冲击,尤其是对于一些基础的css.html.js问题居多,所以自我也在做反思,今天就css问题,如何让一个子元素div块元素上下左右居中 (以下总结方法,都已得到验证). ...
- python 抽象类、抽象方法、接口、依赖注入、SOLIP
1.程序设计原则:SOLIP SOLIP设计原则 1.单一责任原则(SRP) 一个对象对只应该为一个元素负责 2.开放封闭原则(OCP) 对扩展开放,修改封闭 3.里氏替换原则(LSP) 可以使用任何 ...
- Freemarker中空值 null的处理++++定义数组
http://blog.java-zone.org/archives/800.html <#list listBlogPost as blogPost> </#list> 如果 ...
- ES6深入学习记录(一)class方法相关
今天学习class相关的一些使用方法,着重在于class extends class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多. 上面的代码定义了一 ...
- lua命令行编译
http://jingyan.baidu.com/article/359911f551917457fe0306e5.html 最后将生成的.exe解释器的根目录配置到系统环境变量 copy lua.c ...
- java-读取xml
1.使用w3c.document /** * 测试 * */ public static void testReadLabel() { String path = "C:\\Users\\h ...