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. Solr安装入门

    Solr安装入门:http://www.importnew.com/12607.html 查询详解:http://www.360doc.com/content/14/0306/18/203871_35 ...

  2. QModelIndex 与 QStandardItem互转

    1. QModelIndex 转换成QStandardItem QStandardItem * item=QStandardItemModel::​itemFromIndex(const QModel ...

  3. nw 调用系统命令

    ---------------------------------------------------------------------------------------------------- ...

  4. Android手机使用广播监听手机收到的短信

    我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态 ...

  5. Object Tracking Benchmark

    Abstract 问题: 1)evaluation is often not suffcient 2)biased for certain types of algorthms 3)datasets ...

  6. ubuntu下设置电脑为WiFi热点

    这是个问题 自从Windows奔溃以来! 扔掉360:Linux下无线网卡作WiFi路由器

  7. 【leetcode】2-AddTwoNums

    problem: Add Two Numbers 需要学习的是单向链表的基础使用:

  8. 【JUnit】@Test 报错,"Test cannot be resolved to a type"

    想用单元测试 JUnit 单元测试下写好的方法,发现写 @Test 标签报错了,"Test cannot be resolved to a type" 原来是项目没有导入 JUni ...

  9. 利用WebApplicationInitializer配置SpringMVC取代web.xml

    对于Spring MVC的DispatcherServlet配置方式,传统的是基于XML方式的,也就是官方说明的XML-based,如下: <servlet> <servlet-na ...

  10. centos重启redis后,数据丢失

    编辑/etc/sysctl.conf ,改vm.overcommit_memory=1, 然后sysctl -p 使配置文件生效 T