对于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;
}

  

转载于:https://www.cnblogs.com/clrs97/p/7143889.html

BZOJ3795 : 魏总刷DP相关推荐

  1. leetcode(力扣)刷题笔记(c++)【中】

    文章预览: 回溯算法 77. 组合 216.组合总和III 17.电话号码的字母组合 39. 组合总和 40.组合总和II 131.分割回文串 93.复原IP地址 78. 子集 90.子集II 491 ...

  2. HDU5763 Another Meaning(KMP+dp)

    题意: 给你一个主串一个子串,然后主串中匹配到子串就可以把当前部分改为*, 问主串有多少中不同的样子 思路: 先KMP预处理主串中所有匹配到子串的末尾位置 然后用dp dp[N][2]只更新成功匹配的 ...

  3. 从小白到 6 个 offer,我究竟是怎么刷题的?

    今天和大家系统分享下我去年转行时的一个刷题过程和方法,希望对你有所帮助. 首先介绍下我的编程基础,我学的是金融工程专业,硕士时学过 C++ 的课,这也是我的编程入门课(但我个人非常不推荐用 C++ 入 ...

  4. The Lost House POJ - 2057(树形dp+贪心 (双线最优子结构问题))

    思路 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这 只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行 ...

  5. 关于Android开发中如何使用dp表示长宽

    本文正文在第二.四小节,第一.三小节可略过不看. 1. 使用px替代dp进行开发存在的一些问题 虽然网上有使用px替代dp进行开发的技巧,比如鸿洋大神的这篇文章,但存在以下问题: 需要建很多分辨率目录 ...

  6. Placing Lampposts ,UVa 10859 树形dp

    UVa 10859 日常刷白书,第三次刷dp刷到这题,竟然还是不会写..... 这个题给定n个点m条边的无向无环图,有至多1000个节点,每个节点有两个状态,可以放灯或者不放灯,要求放最少的灯使得所有 ...

  7. 牛客网SQL 进阶篇刷题

    牛客网SQL 进阶篇刷题(1-19) 用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001,并在50分钟后提交,得了90分: 用户1002在2021年9月4日上午7点1分2秒开始 ...

  8. nexus7 刷成kali linux,Nexus 6p 刷入Kali Linux Nethunter 2019.4方法

    19.12.20 NetHunter 版本更新为,2019.4 刷写方法不变,已刷过.3版本的,只要手机重置,然后直接再刷一遍su,和新的19.4的包,就行了 本教程主要参考了以下链接中的安装方法:h ...

  9. Nexus arm Linux,[原创] Nexus 6p 刷入Kali Linux NetHunter 2019.3方法

    本教程主要参考了以下链接中的安装方法:https://build.nethunter.com/contributors/re4son/angler/ 他这里提供了刷机需要的大部分组件,不过如果完全按照 ...

最新文章

  1. 关系数据库的范式和反范式
  2. 复习笔记(二)——C++面向对象设计和使用
  3. 剑指offer22-链表中倒数第k个结点
  4. java体系的中间件适用于go吗_golang gf框架自定义中间件实现管理界面授权
  5. android中注册代码怎么写,Android P HIDL demo代码编写 (原创)
  6. 开源大数据周刊-第37期
  7. java 映射servlet,java – 将映射或对象从jsp传递到servlet
  8. 我的世界神奇宝贝服务器怎么修改6v,我的世界神奇宝贝mod修改精灵6V满努力等级图文教程...
  9. wmp搭建PHP,教你如何使用WIN7自带的WMP实现媒体共享
  10. 游戏服务器网络出现波动排查方法
  11. java开发社交网站_仿知乎问答社交平台网站
  12. 中国无尘室饮水机市场趋势报告、技术动态创新及市场预测
  13. Python oauth2登录Outlook读取邮件
  14. oracle的left join和inner join的区别
  15. 静态补充CSS之IFC、FFC、GFC讲解
  16. 理清gcc、libc、glibc、libc++、libstdc++的关系
  17. 记大学计网课设——基于B/S架构的视频点播系统设计
  18. 【python】提高图像质量
  19. matlab怎么搭建神经网络,matlab实现神经网络算法
  20. 好用计算机,六款让你电脑更好用的软件

热门文章

  1. mysql作为kafka生产者_Kafka之生产者
  2. 区别 和esc 打印指令tsc_复印机和打印机仅仅是功能上的区别?
  3. 2+22+222+2222(直到n个2的精确计算)
  4. linux postgres恢复数据库,从纯文本格式的备份文件恢复数据库
  5. pitstop插件使用说明_PDF其他及PitStop插件
  6. 『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办
  7. [多图/秒懂]白话OpenPose,最受欢迎的姿态估计网络
  8. LeetCode Hot100 ---- 最长相关专题(动态规划)
  9. 全局变量和局部变量命名规则_变量范围和LEGB规则
  10. ai人工智能收入_人工智能促进收入增长:使用ML推动更有价值的定价