BZOJ3795 : 魏总刷DP
对于HARD:
需要满足$k+u[i]\times k\leq T+late[i]$。
对于EASY:
需要满足$k+u[i]\times k\leq T-rest[i]$。
故对于HARD,设$a[i]=-late[i]$,对于EASY,设$a[i]=rest[i]$,并将所有题目的$u[i]$都$+1$。
那么需要满足$\max(u[i]\times k+a[i])\leq T$。
求出这些直线形成的下凸壳,分段积分即可。
时间复杂度$O(n\log n)$。
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100010;
const double eps=1e-9;
int n,i,x,q[N],t;char ch[9];double m,L,R,f[N],ans;
struct P{int k,b;}a[N];
inline bool cmp(const P&a,const P&b){return a.k==b.k?a.b>b.b:a.k<b.k;}
inline double pos(int x,int y){return 1.0*(a[x].b-a[y].b)/(a[y].k-a[x].k);}
inline int sgn(double x){
if(x>eps)return 1;
if(x<-eps)return -1;
return 0;
}
inline void cal(double l,double r,int k,int b){
l=max(l,0.0),r=min(r,min(m,(R-b)/k));
if(l+eps>r)return;
double mid=min(max((L-b)/k,l),r);
ans+=(mid-l)*(R-L)+(R-b)*(r-mid)-(r*r-mid*mid)*k/2;
}
int main(){
scanf("%d%lf%lf%lf",&n,&m,&L,&R);
for(i=1;i<=n;i++)scanf("%d",&a[i].k),a[i].k++;
for(i=1;i<=n;i++){
scanf("%s%d",ch,&x);
if(ch[0]=='H')a[i].b=-x;else a[i].b=x;
}
sort(a+1,a+n+1,cmp);
for(q[t=1]=1,i=2;i<=n;i++)if(a[i].k>a[i-1].k){
while(t>1&&sgn(pos(q[t-1],q[t])-pos(q[t],i))>=0)t--;
q[++t]=i;
}
for(f[t]=m,i=1;i<t;i++)f[i]=pos(q[i],q[i+1]);
for(i=1;i<=t;i++)cal(f[i-1],f[i],a[q[i]].k,a[q[i]].b);
return printf("%.4f",ans/m/(R-L)),0;
}
BZOJ3795 : 魏总刷DP的更多相关文章
- bzoj 3795: 魏总刷DP
Description 魏总,也就是DP魏又开始刷DP了.一共有n道题,第i道题魏总原本需要u[i]秒的时间.不过,为了表达对这些水题的藐视,魏总决定先睡k秒再开始刷题.魏总并不清楚自己会睡多久,只知 ...
- 怒刷DP之 HDU 1257
最少拦截系统 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- 怒刷DP之 HDU 1160
FatMouse's Speed Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- 怒刷DP之 HDU 1260
Tickets Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- 怒刷DP之 HDU 1176
免费馅饼 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 怒刷DP之 HDU 1087
Super Jumping! Jumping! Jumping! Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64 ...
- 怒刷DP之 HDU 1114
Piggy-Bank Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- 怒刷DP之 HDU 1069
Monkey and Banana Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- 怒刷DP之 HDU 1024
Max Sum Plus Plus Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- 复习reactnative....
import React, { Component } from 'react'; import { AppRegistry, Text, Image, View, TextInput, Scroll ...
- Nginx中配置undertow进行两个项目的动静分离配置
#user nobody; worker_processes ; pid /var/run/nginx.pid; events { worker_connections ; } http { incl ...
- 修改Tomcat默认连接数
<Connector port=" protocol="HTTP/1.1" connectionTimeout=" redirectPort=" ...
- [转] whistle--全新的跨平台web调试工具
whistle是基于Node实现的跨平台web调试代理工具,类似的工具有Windows平台上的Fiddler+Willow,基于Java实现的Charles,及公司同事基于Node实现的Livepoo ...
- js高级程序设计
defer 异步脚本,脚本延迟到文档完全被解析和显示之后再执行.只对外部脚本文件有效.按顺序执行脚本.但在实际情况下,并不一定会按照顺序执行最好只有一个延迟脚本.支持H5的浏览器会忽略给脚本设置 de ...
- 第k个互质数(二分 + 容斥)
描述两个数的a,b的gcd为1,即a,b互质,现在给你一个数m,你知道与它互质的第k个数是多少吗?与m互质的数按照升序排列. 输入 输入m ,k (1<=m<=1000000;1<= ...
- Mafly.Mail实现发送邮件
安装 打开程序包管理器控制台,执行命令:Install-Package Mafly.MailInstall-Package Newtonsoft.Json.dll 安装之后,项目会自动创建一个Conf ...
- BeautifulSoup下Unicode乱码解决
今天在用scrapy爬某个网站的数据,其中DOM解析我用的是BeautifulSoup,速度上没有XPath来得快,不过因为用了习惯了,所以一直用的bs,版本是bs4 不过在爬取过程中遇到了一些问题, ...
- WPF中datagrid不显示滚动条问题
WPF中DataGrid是自带滚动条的,当内容显示不下时可以使用滚动条显示.但是,开发中遇到了DataGrid一直不显示滚动条.之前也曾遇到过同类问题,再次经过查找,发现是StackPanel的原因, ...
- Mongodb查询提示com.MongoDB.MongoException: too much data for sort() with no index
解决办法: 查询数据量太大,添加索引即可解决问题 通过scrapy爬行完数据后,通过db.wooyun.drops.ensureIndex({"datetime":1})