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个任务被分成若 ...
随机推荐
- Java并发基础总结
并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力.如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可 交互性将大大改善.现代的PC都有多个CPU或一个CPU中有多 ...
- Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案
最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...
- Android开发之扫描二维码开发
原贴地址:http://www.cnblogs.com/Fndroid/p/5540688.html 二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这样的,可以放心 ...
- 常用jdbc的url
Microsoft SQL Server Microsoft SQL Server JDBC Driver (一般用来连接 SQLServer 2000) 驱动程序包名:msbase.jar mssq ...
- Redis设计与实现读书笔记(一) SDS
作为redis最基础的底层数据结构之一,SDS提供了许多C风格字符串所不具备的功能,为之后redis内存管理提供了许多方便.它们分别是: 二进制安全 减少字符串长度获取时间复杂度 杜绝字符串溢出 减少 ...
- Markdown
1. 斜体和粗体 代码: *斜体*或_斜体_ **粗体** ***加粗斜体*** ~~删除线~~ 显示效果: 这是一段斜体 这是一段粗体 这是一段加粗斜体 这是一段删除线 2. 分级标题 第一种写法: ...
- [教程]phpwind9.0应用开发基础教程
这篇文章着重于介绍在9.0中如何开发一个插件应用的示例,step by step来了解下在9.0中一个基础的应用包是如何开发的.1.目录结构OK,首先是目录结构,下面是一个应用我们推荐的目录. 应用包 ...
- Android调用WebService
这两天给老师做地铁app的demo,与后台的交互要用WebService,还挺麻烦的.所以想写点,希望有用. Web Services(Web服务)是一个用于支持网络间不同机器互操作的软件系统,它是一 ...
- ajax两张传输数据方式
encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIstring 必需.一个字符串,含有 URI 或其他要编码的文本. 返 ...
- UML(Unified Model Language)统一建模语言
一.九种图 二.类间关系 一.UML中的九种图 1.用例图(use case diagrams) [概念]描述用户需求,从用户的角度描述系统的功能 [描述方式]椭圆表示某个用例:人形符号表示角色 [目 ...