Description

魏总,也就是DP魏又开始刷DP了。一共有n道题,第i道题魏总原本需要u[i]秒的时间。不过,为了表达对这些水题的藐视,魏总决定先睡k秒再开始刷题。魏总并不清楚自己会睡多久,只知道k是不超过m的正实数。并且魏总还忘了这节课有多长,只记得这节课的长度T(单位:秒)是在L到R之间。(魏总是从开始上课的时候开始睡的)睡醒后,魏总神奇地发现自己做每道题所需的时间变成了原来的k倍。不过DP魏就是DP魏,他可以同时做这n道DP,互不影响。
魏总本想虐场,但他很快发现自己低估这些题了。于是他决定将题分为HARD和EASY。对于每道HARD的题,他希望能最晚在下课后late[i]秒内完成,而对于EASY的题,他希望在下课前rest[i]秒之前完成。
求魏总达到目标的概率。 

Input

第一行,一个整数n
第二行,三个实数m,L,R
第三行,n个整数,第i个为u[i]
就下来n行,每行一个字符串和一个整数,字符串为”HARD”或”EASY”,整数为对应的late[i]或rest[i]。

Output

一行,魏总达到目标的概率,保留4位小数。
将(k,T)看作平面上的点,约束条件为线性不等式,可以转为求半平面交的面积
#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的更多相关文章

  1. BZOJ3795 : 魏总刷DP

    对于HARD: 需要满足$k+u[i]\times k\leq T+late[i]$. 对于EASY: 需要满足$k+u[i]\times k\leq T-rest[i]$. 故对于HARD,设$a[ ...

  2. Bzoj 1131[POI2008]STA-Station (树形DP)

    Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...

  3. [BZOJ 4332] [JSOI2012]分零食(DP+FFT)

    [BZOJ 4332] [JSOI2012]分零食(DP+FFT) 题面 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\ ...

  4. BZOJ 3156: 防御准备 斜率优化DP

    3156: 防御准备 Description   Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...

  5. 怒刷DP之 HDU 1257

    最少拦截系统 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  6. [BZOJ 1025] [SCOI2009] 游戏 【DP】

    题目链接:BZOJ - 1025 题目分析 显然的是,题目所要求的是所有置换的每个循环节长度最小公倍数的可能的种类数. 一个置换,可以看成是一个有向图,每个点的出度和入度都是1,这样整个图就是由若干个 ...

  7. bzoj 3156 防御准备(斜率DP)

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 837  Solved: 395[Submit][Status][Discuss] ...

  8. BZOJ 1090 字符串折叠(区间DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1090 题意:字符串AAAAAAAAAABABABCCD的最短折叠为9(A)3(AB)CC ...

  9. BZOJ 2726: [SDOI2012]任务安排( dp + cdq分治 )

    考虑每批任务对后面任务都有贡献, dp(i) = min( dp(j) + F(i) * (T(i) - T(j) + S) ) (i < j <= N)  F, T均为后缀和. 与j有关 ...

随机推荐

  1. ArrayList与List<T>笔记

    ArrayList与List<T>笔记 ArrayList是在System.Collections命名空间的一个类, 通过Add的方法添加一个项, 当进到这个类的元数据时, 可以看到这个方 ...

  2. Python Django 之 MVT

    一.Django的MVT模式 M: Model, 模型 与MVC中的M相同,负责对数据的处理 V: View, 视图 与MVC中的C类似,负责处理用户请求,调用M和T,响应请求 T: Template ...

  3. Translating Skills 英汉语序的对比及翻译

    本文记录于培训课程. ----------------------------------------- word order:Refers to the sorting in language un ...

  4. CentOS 下安装和使用 Docker

    引言: 在服务器开发过程中,环境部署无疑是及其繁琐的事情,特别是当项目数量和规模达到一定级别之后,在一台新的机器上部署项目环境无疑是极其漫长而痛苦的,那么什么办法能够实现我们的目标:在开发环境的一次配 ...

  5. Object -c基础知识(5)--release 之后 retainCount为何为1

    在XCode中加入如下代码:  UILabel *label=[UILabel alloc]; [label setText:@"TestLabel"]; NSLog(@" ...

  6. ios开发过程中描述文件(provisioning profile)过期导致ios无法正常安装的处理办法

    1.登录开发者中心,重新编辑描述文件,获得最新的描述文件.(如果对应的P12文件也过期,需要同时下载最新的p12文件).----该步骤需要有权限的人才能操作. 2.下载最新的描述文件和p12文件(如果 ...

  7. ODBC 安装/使用/编程

    前言: 主要讲解ODBC API, 以mysql为例, 从配置到安装, 再到具体的编程, 以期对ODBC有个初步的认识. *) 下载mysql, 选择社区版mysql, 并安装 http://dev. ...

  8. gettimeofday的使用

    前言 好像只能在linux平台使用,在windows平台不能使用.... #include <sys/time.h> long cur_tp, cost_tp, tmp_tp; struc ...

  9. HihoCoder - 1886 :中位数2(贪心)

    描述 对于一个长度为n的数列A,我们如下定义A的中位数med(A): 当n是奇数时,A的中位数是第(n+1)/2大的数:当n是偶数时,A的中位数是第n/2大的数和第n/2+1大的数的平均值. 同时,我 ...

  10. HDU2034:人见人爱A-B

    Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法 ...