bzoj 3795: 魏总刷DP
Description
Input
Output
#include<cstdio>
#include<algorithm>
const int N=;
int n,lp=,p=,as[N];
double xm,ym,S,S1=,L,R;
char s[];
struct pos{double x,y;}ps[N];
struct ln{
double k,b;
double x(double y){return (y-b)/k;}
double y(double x){return k*x+b;}
bool operator<(ln w)const{return k!=w.k?k<w.k:b>w.b;}
bool in(pos w){return y(w.x)<=w.y;}
pos operator&(ln w){
double x=(w.b-b)/(k-w.k);
return (pos){x,y(x)};
}
}ls[N];
int main(){
scanf("%d%lf%lf%lf",&n,&xm,&L,&R);
ym=R-L;
S=xm*ym;
for(int i=;i<=n;++i)scanf("%d",as+i);
ls[lp++]=(ln){,};
for(int i=,b;i<=n;++i){
scanf("%s%d",s,&b);
if(s[]=='E')b*=-;
ls[lp++]=(ln){as[i]+,-L-b};
}
std::sort(ls,ls+lp);
for(int i=;i<lp;++i){
if(i&&ls[i].k==ls[i-].k)continue;
while(p>=&&!ls[i].in(ls[p-]&ls[p-]))--p;
ls[p++]=ls[i];
}
while(p>=&&(ls[p-]&ls[p-]).x>xm)--p;
int p0=;
while(p-p0>=&&(ls[p0]&ls[p0+]).x<)++p0;
ps[p0]=(pos){,ls[p0].y()};
if(ps[p0].y>=ym)return puts("0.0000"),;
for(int i=p0+;i<p;++i)ps[i]=ls[i]&ls[i-];
ps[p]=(pos){xm,ls[p-].y(xm)};
if(ps[p].y>ym){
while(p-p0>=&&(ls[p-]&ls[p-]).y>ym)--p;
ps[p]=(pos){ls[p-].x(ym),ym};
}
for(int i=p0+;i<=p;++i){
S1+=(ps[i].x-ps[i-].x)*(ym*-ps[i].y-ps[i-].y);
}
printf("%.4f",S1/S/);
return ;
}
bzoj 3795: 魏总刷DP的更多相关文章
- BZOJ3795 : 魏总刷DP
对于HARD: 需要满足$k+u[i]\times k\leq T+late[i]$. 对于EASY: 需要满足$k+u[i]\times k\leq T-rest[i]$. 故对于HARD,设$a[ ...
- Bzoj 1131[POI2008]STA-Station (树形DP)
Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...
- [BZOJ 4332] [JSOI2012]分零食(DP+FFT)
[BZOJ 4332] [JSOI2012]分零食(DP+FFT) 题面 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\ ...
- BZOJ 3156: 防御准备 斜率优化DP
3156: 防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...
- 怒刷DP之 HDU 1257
最少拦截系统 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- [BZOJ 1025] [SCOI2009] 游戏 【DP】
题目链接:BZOJ - 1025 题目分析 显然的是,题目所要求的是所有置换的每个循环节长度最小公倍数的可能的种类数. 一个置换,可以看成是一个有向图,每个点的出度和入度都是1,这样整个图就是由若干个 ...
- bzoj 3156 防御准备(斜率DP)
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 837 Solved: 395[Submit][Status][Discuss] ...
- BZOJ 1090 字符串折叠(区间DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1090 题意:字符串AAAAAAAAAABABABCCD的最短折叠为9(A)3(AB)CC ...
- BZOJ 2726: [SDOI2012]任务安排( dp + cdq分治 )
考虑每批任务对后面任务都有贡献, dp(i) = min( dp(j) + F(i) * (T(i) - T(j) + S) ) (i < j <= N) F, T均为后缀和. 与j有关 ...
随机推荐
- Ubuntu中使用WPS
ubunu系统下用WPS办公软件比较好,比较兼容MS office, ubuntu下WPS相关命令有:et,wps,wpp. 使用Ctrl+Alt+T打开命令端, "et"命令可以 ...
- 递归算法,如何把list中父子类对象递归成树
以前写代码for循环写的多,递归除了在大学学习以外,真没怎么用过! 最近项目中使用到了关于族谱排列的问题,就是怎么把数据库里的多个子父类people对象,在界面中用树的结构展示出来 假设数据库中peo ...
- 【python】判断值是否在list和set的对比以及set的实现原理
判断值是否在set集合中的速度明显要比list快的多, 因为查找set用到了hash,时间在O(1)级别. 假设listA有100w个元素,setA=set(listA)即setA为listA转换之后 ...
- 《Effective Java 第二版》读书笔记
想成为更优秀,更高效程序员,请阅读此书.总计78个条目,每个对应一个规则. 第二章 创建和销毁对象 一,考虑用静态工厂方法代替构造器 二, 遇到多个构造器参数时要考虑用builder模式 /** * ...
- OracleParameter.UdtTypeName的值必须是全大写!
不然找不到Type. 垃圾Oracle浪费哥大半天时间.
- L220
He must not allow this unusual barrier (obstacle) to stop him from fighting against the enemy.他绝不能让这 ...
- JSONField解决序列化与反序列化字段匹配问题
需求:调用第三方数据,数据格式为Json,并提供一个接口将获取的第三方数据给本公司其他部门调用. 处理流程:第三方Json--反序列化实体--保存到本地数据库--查询数据--序列化Json数据供本公司 ...
- 保护 iOS 用户数据安全: Keychain 和 Touch ID
原文:How To Secure iOS User Data: The Keychain and Touch ID 作者:Tim Mitra 译者:kmyhy 更新说明:本教程由 Tim Mitra ...
- WinRAR备份技巧 - imsoft.cnblogs
RAR控制台日常备份策略 run.batrar a -ep1 -agYYYY{年}MM{月}DD{日} 备份 @list.txt-ep1是忽略原文件路径,rar包里是一堆文件,没有目录结构-ag附加命 ...
- 蓝桥杯 BASIC-3:字母图形
基础练习 字母图形 时间限制:1.0s 内存限制:256.0MB 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCD ...