题解:CF1016E Rest In The Shades

题意

平面上有一个点光源 s s s 并以每秒 1 1 1 单位长度的速度从点 ( a , s y ) (a,sy) (a,sy) 移动到点 ( b , s y ) (b,sy) (b,sy),其中 s y < 0 sy<0 sy<0;在 x x x 轴正方向上有 n n n 不相交、不接触的挡板,第 i i i 个档板挡住了 x x x 轴上 [ l i , r i ] [l_i,r_i] [li,ri] 的部分。对于点 ( x , y ) (x,y) (x,y),当它与 s s s 的连线被某个挡板相交或接触时,我们说 ( x , y ) (x,y) (x,y)​ 在阴影中。

现在给定 q q q 个平面上的点,求出这些点在 s s s 移动过程中处于阴影内的总时间。

解法

  • 黑色部分为 x x x 轴,蓝色部分为挡板,红色部分为 s s s 的移动范围。

如图,对于一个点 P P P,连接点 P P P A , B A,B A,B x x x 轴于两点 A ′ , B ′ A',B' A,B(灰色粗线)。我们求出 [ A ′ , B ′ ] [A',B'] [A,B] 中挡板的占比后,就可以通过相似三角形(灰色、青色部分)求出 [ A , B ] [A,B] [A,B] 上能让 P P P 处于阴影中的总距离(深红色线)。我们将给定挡板按照 x x x 坐标排序,两次二分求出 A ′ A' A B ′ B' B 附近的挡板。预处理出挡板长度的前缀和统计这个点的贡献即可。具体见代码。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
const double eps = 1e-9;
struct Nodes { // 同时表示 A,B 两个点和挡板左右边界。double x,y;Nodes (double u = 0, double v = 0) {x = u, y = v;}
} X,Y,a[maxn],now;
int n; double sum[maxn];
int Q;
int main() {scanf("%lf%lf%lf%d",&X.y,&X.x,&Y.x,&n);n ++, Y.y = X.y;for (int i = 2;i <= n;i ++)scanf("%lf%lf",&a[i].x,&a[i].y),sum[i] = sum[i - 1] + (a[i].y - a[i].x);a[++ n] = Nodes{1e18,1e18}, sum[n] = sum[n - 1];scanf("%d",&Q);while (Q --) {scanf("%lf%lf",&now.x,&now.y);double k = now.y / (now.y - X.y); // 相似三角形double L = (X.x - now.x) * k + now.x, R = (Y.x - now.x) * k + now.x;if (L <= a[1].x || R >= a[n].y) { // 特判printf("%.6f\n",0);continue;}// 两边二分求左右的挡板int l = 1, r = n; while (l < r) {int mid = (l + r + 1) >> 1;if (a[mid].x <= L) l = mid;else r = mid - 1;}double ans = max(0.0,a[l].y - L) - sum[l];l = 1, r = n;while (l < r) {int mid = l + r >> 1;if (a[mid].y >= R) r = mid;else l = mid + 1;}ans += sum[r] - min(a[l].y - R, a[l].y - a[l].x);printf("%.7lf\n",ans * (Y.x - X.x) / (R - L)); }return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot项目跨域设置总结

方式一&#xff1a; Configuration public class CorsConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允许跨域的路径.allowedOrigins("*") // 允许跨域请求的域名.al…

高校电动自行车充电桩管理系统-手把手调试搭建

高校电动自行车充电桩管理系统-手把手调试搭建 高校电动自行车充电桩管理系统-手把手调试搭建

【Spring Boot】响应式编程

响应式编程 1.WebFlux2.比较 MVC 和 WebFlux2.1 工作方式2.2 Spring MVC 与 Spring WebFlux 的区别2.3 使用 WebFlux 的好处 3.Mono 和 Flux3.1 Mono 和 Flux 是什么3.2 Mono 和 Flux 的区别 4.开发 WebFlux 的流程4.1 注解式开发流程4.2 响应式开发流程 5.用注解式开发实现 He…

SD3314A降压恒流LED驱动器电压降压2.5V-6.0V标准电源

该SD3314A是一个降压恒流LED驱动器。当输入电压降到低于LED正 向电压时&#xff0c;则SD3314A进入LDO模式运行 该SD3314A支持的输入电压范围从2.5V至6.0V&#xff0c;允许使用一个单一 的锂/锂聚合物电池&#xff0c;3AA或4AA电池&#xff0c;USB和其他标准电源 FB电压仅为0.1V…

基于开源ATmega8 无感BLDC程序移植到ATmega328PB

基于开源ATmega8 无感BLDC程序移植到ATmega328PB &#x1f516;基于Atmel Studio 7.0开发环境。&#x1f955;开源原项目资源地址&#xff1a;https://svn.mikrokopter.de/websvn/listing.php?repnameBL-Ctrl&path%2F&&#x1f4cd;原理图和PCB资源 BL-Ctrl v2.0 in E…

Win32 API

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏 : C语言 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 一.Win32 API 1.Win32 API介绍 Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c;它同时也是…

JAVA给一个JSON数组添加对象

操作Mysql表的json字段&#xff0c;查询json字段的内容&#xff0c;将新增的内容添加到查询的json数组中 String a "[{\"name\": \"张三\", \"age\": 10, \"gender\": \"男\", \"email\": \"123qq.co…

Redis内存回收-内存淘汰策略

LFU的访问次数之所以叫做逻辑访问次数&#xff0c;是因为并不是每次key被访问都计数&#xff0c;而是通过运算&#xff1a; 生成0~1之间的随机数R计算 (旧次数 * lfu_log_factor 1)&#xff0c;记录为P如果 R < P &#xff0c;则计数器 1&#xff0c;且最大不超过255访问…

【华为OD机试-C卷D卷-200分】二叉树的广度优先遍历(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。 现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点-&…

9.任务调度

一、开启任务调度器 1.函数 vTaskStartScheduler() 函数 vTaskStartScheduler()用于启动任务调度器&#xff0c;任务调度器启动后&#xff0c;FreeRTOS 便会开始 进行任务调度&#xff0c;除非调用函数 xTaskEndScheduler()停止任务调度器&#xff0c;否则不会再返回。函数 vTa…

Oracle数据库中的Freelist解析

Freelist&#xff08;自由列表&#xff09;是Oracle数据库中用于管理段&#xff08;如表或索引段&#xff09;空间的一种机制&#xff0c;尤其在使用手动段空间管理&#xff08;MSSM&#xff09;的表空间中尤为重要。Freelist的主要职责是跟踪和分配段内位于高水位标记&#xf…

JVM何时GC

何时进行GC 垃圾回收&#xff08;GC&#xff09;主要分为两类&#xff1a;Minor GC&#xff08;也称Young GC&#xff09;和Full GC&#xff08;或Major GC&#xff09;**&#xff0c;主要依据内存使用情况和对象生命周期进行触发。 Minor GC主要针对**年轻代&#xff08;You…

Centos修改系統語言

一、使用命令行修系统语言 1、显示系统当前语言环 [rootkvm-suma ~]# localectl System Locale: LANGen_US.utf8 VC Keymap: cn X11 Layout: cn 2、查看系统支持字符集 [rootkvm-suma ~]# locale -a 2、设置系统语言环境 [rootkvm-suma ~]# localectl set-locale LANGz…

【CMake】CMake入门(三)常见的cmake脚本指令 日志输出 CMake内置的变量

本篇文章不是新手入门教学文章&#xff0c;主要是记录笔者个人的学习笔记 CMake入门&#xff08;三&#xff09; 一、CMake中的脚本指令1. 设置CMake最低版本要求2、指定项目名称3、添加生成的可执行文件4、添加生成库文件5、搜索文件6、生成文件7、添加子目录8、添加头文件的搜…

【GESP试卷】2024年03月Scratch四级试卷

2024年GESP03月认证Scratch四级试卷 分数&#xff1a;100 题数&#xff1a;27 一、单选题(共15题&#xff0c;每题2分&#xff0c;共30分) 010203040506070809101112131415CDBBACBCDCDADBA 1、小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【00】补充

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【00】补充 插件IDEAVsCode MavenvagrantDocker解决MySQL连接慢问题启动&#xff08;自动&#xff09;Docker注意切换到root用户远程访问MySQL MyBatisPlus代码地址参考 插件 IDEA Mybati…

【数据挖掘】四分位数识别数据中的异常值(附代码)

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

c++11 auto类型推导的使用建议和注意事项

概述: 首先c是强类型语言&#xff0c;也就是在定义变量的时候必须指定具体的类型。 像我们常用的int&#xff0c;float&#xff0c;char等等都是类型&#xff0c;auto关键字原本的意思是说明某个变量是自动变量&#xff0c;c11提升了它的功能。 在c11之后&#xff0c;我们可以使…

STM32F1之OV7725摄像头

目录 1. 摄像头简介 2. OV7725 摄像头简介 3. OV7725 引脚 4. OV7725 功能框架图 5. SCCB时序 5.1 SCCB 的起始、停止信号及数据有效性 5.2 SCCB 数据读写过程 1. 摄像头简介 在各类信息中&#xff0c;图像含有最丰富的信息&#xff0c;作为机…