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 ...
随机推荐
- Ubuntu 进入、退出命令行的快捷键
进入: Ctrl+Alt+F1 退出: Ctrl+Alt+F7(或者 Alt+F7) 进入命令行窗口:Ctrl+Alt+T
- python的相关基本操作
1.安装第三方库:pip install requests 2.升级:pip install --upgrade library_name 3.升级所有已安装的库: pip list --outdat ...
- Python模拟人猜数过程(折半查找)
import random# (0,1000)随机产生一个数key = random.randint(1,1000)# 用来统计猜的次数count = 0 # 定义一个折半查找的函数def BinSe ...
- 改变input type="file" 文字、样式等
<div class="tac"> <input type="file" id="browsefile" class=&q ...
- K/3 Cloud Web API接口说明文
K/3 Cloud Web API接口说明文 目的 三方集成,提供第三方系统与Cloud集成调用接口. 技术实现 HTTP + Json 提供标准接口 编号 名称 说明 1 Kingdee.BOS.W ...
- Leetcode刷题第20天
一.找树左下角的值 题目:513. Find Bottom Left Tree Value C++ Soution 1: /** * Definition for a binary tree node ...
- dnsjava usage
linux dig 命令使用方法 https://www.imooc.com/article/26971?block_id=tuijian_wz https://jimwayne.blogspot.c ...
- Visual Studio 2015 插件开发入门
(1)安装 Visual Studio 2015 的时候选择 Visual Studio 扩展性工具(Visual Studio Extensibility Tools).对于已经安装好 Visual ...
- .net core 发布后提示Start error
纪录篇: 发布Core版本的项目后一直提示error,通过网络查询资料后确认梳理问题的逻辑 1.验证环境是否支持,开发环境及server环境 参考:https://docs.micr ...
- scrapy笔记
1.关于请求url状态码重定向问题: from scrapy import Request handle_httpstatus_list = [404, 403, 500, 503, 521, 522 ...