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. 读书笔记 C# 控制台应用程序之Main方法浅析

    Main方法是C#控制台应用程序和Windows窗体应用程序的入口点.Main方法可以有形参,也可以没有,可以有返回值(int整型),也可以没有.如下定义: 无返回值.无形参的格式: static v ...

  2. 驱动程序多线程 PsCreateSystemThread

    内核函数PsCreateSystemThread负责创建新线程.该函数可以创建两种线程,一种是用户线程,它属于当前进程中的线程.另一种是系统线程,系统线程不属于当前用户进程,而是属于系统进程,一般PI ...

  3. vim/vi用法总结

    第一章:安装: 在命令行运行vim,如果找不到程序,需要自己安装. 1.1 下载 从官方网站ftp://ftp.vim.org/pub/vim/unix/中选择一个版本下载,我这里使用的是vim-7. ...

  4. Java平台标准版本

    JDK   Java Language Java Language     Tools &Tool APIs java javac javadoc jar javap jdeps Script ...

  5. SWIFT中切換UIContainerView內的Controller

    如下,一个UIContainerView内切换两个Controller,当点击登录的时候UIContainerView的视图为LoginController,当点击登记的时候UIContainerVi ...

  6. PowerShell添加和部署WSP

    SharePoint PowerShell在SharePoint Product列表里边,然后以管理员权限启动. 1. 添加Solution 到 SharePoint Farm. Add-SPSolu ...

  7. android系列9.LinearLayout学习

    <!-- <LinearLayout> 线性版面配置,在这个标签中,所有元件都是按由上到下的排队排成的 --> <LinearLayout xmlns:android=& ...

  8. SIM800C 使用基站定位

    /******************************************************************************* * SIM800C 使用基站定位 * ...

  9. caffe安装编译问题-ImportError: No module named google.protobuf.internal

    问题描述 ~/Downloads/caffe$ python Python (default, Dec , ::) [GCC ] on linux2 Type "help", &q ...

  10. 将整个文件夹推上github

    /*游戏或者运动才能让我短暂的忘记心痛,现如今感觉学习比游戏和运动还重要——曾少锋*/ 首先你要有一个本地仓库和一个远程仓库(github中的仓库).git文件夹下面不能含有 git文件夹,如果有的话 ...