Atcoder Beginner Contest 374 D题题解

一. 题目描述

题目传送门 - Atcoder Beginner Contest 374 D - Laser Marking

二. 思路分析

1.题目大意

在平面上给你一个激光(可看作一个点)和若干条线段(左右端点分别为 ( a i , b i ) (a_i,b_i) (ai,bi) ( c i , d i ) (c_i,d_i) (ci,di) 。激光在线段上非线段上的速度分别为 s , t s,t s,t 。现在问激光 ( 0 , 0 ) (0,0) (0,0) 开始完全走过每条线段(即对于每条线段,激光必须 ( a i , b i ) (a_i,b_i) (ai,bi) 连续不断地走到 ( c i , d i ) (c_i,d_i) (ci,di) )所用的最短时间是多少。

2.思路分析

先看数据范围:

  • 1 ≤ N ≤ 6 1 \le N \le 6 1N6

发现线段的数量非常少,考虑枚举

我们发现,激光的移动可以表示为以下几步

  1. 激光从 ( 0 , 0 ) (0,0) (0,0) 移到一个线段端点。
  2. 激光沿线段从一个端点到另一个端点。
  3. 激光从该线段另一个端点到另一条线段的一个端点。
  4. 重复步骤 2,3 直到经过所有线段。

可以发现,我们只需要枚举线段的顺序,即先移到哪个线段端点,后移到哪个线段的端点。又因为对于每一条线段有两个端点,那么从两端出发都是可以的,也就需要在枚举每一条线段时再枚举两个端点即可。

3.要点提示

  • 精度问题,存储与计算坐标时用 double
  • 两点 A ( x 1 , y 1 ) , B ( x 2 , y 2 ) A(x1,y1),B(x2,y2) A(x1,y1),B(x2,y2)距离公式(由勾股定理可得):
    A B = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 AB = \sqrt{(x1-x2)^2+(y1-y2)^2} AB=(x1x2)2+(y1y2)2
  • 二进制枚举/深搜dfs 枚举线段的两个端点作为起始点。
  • 起点在 ( 0 , 0 ) (0,0) (0,0)

三. 代码实现

#include <bits/stdc++.h>
using namespace std;
int n,t,s,p[8] = {0,1,2,3,4,5,6,7};
double a[8],b[8],c[8],d[8],ans = 1e9;
double dis(double a1,double b1,double a2,double b2)
{return sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
}
int main()
{cin >> n >> s >> t;for (int i=1;i<=n;i++){cin >> a[i] >> b[i] >> c[i] >> d[i];}do{for (int i=0;i<(1<<(n+1));i++) //二进制枚举线段两个端点{double res = 0,l = 0,r = 0; //起点在(0,0)for (int j=1;j<=n;j++){if (i & (1 << j)){res += dis(l,r,a[p[j]],b[p[j]])/s;l = a[p[j]];r = b[p[j]];res += dis(l,r,c[p[j]],d[p[j]])/t;l = c[p[j]];r = d[p[j]];}else{res += dis(l,r,c[p[j]],d[p[j]])/s;l = c[p[j]];r = d[p[j]];res += dis(l,r,a[p[j]],b[p[j]])/t;l = a[p[j]];r = b[p[j]];}}if (res < ans) //更新最小值{ans = res;}}} while (next_permutation(p+1,p+n+1)); //全排列printf("%.20f",ans);return 0;
}

四. 总结

很考验功底,主要靠暴力求解,但是需要掌握全排列,二进制枚举等技巧,还需要进行转化。总之是一道练习暴力求解的好题。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

昇思学习打卡营第33天|基于MindSpore的恶性皮肤肿瘤识别

1. 实验介绍 本次实验的目标是基于MindSpore框架&#xff0c;训练一个ResNet50模型&#xff0c;用于恶性皮肤肿瘤的分类识别。本实验将使用包含四类皮肤肿瘤图片的数据集&#xff0c;针对ResNet50模型进行微调&#xff0c;训练出一个能够精准分类皮肤病的模型。主要过程包括数据…

Java项目实战II基于Java+Spring Boot+MySQL的房产销售系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着房地产市场的蓬勃发展&#xff0c;房产销售业务日益复杂&#xff0c;传统的手工管理方式已难以满…

指针赋值or常数赋值

int main (){int a 10;int b ;b a;int *c &a;int *d c; } 常数 a,b赋值&#xff1a; 都是将存储的值&#xff08;10&#xff09;赋值给别人。 指针赋值也是类似的&#xff1a; 指针存储的值&#xff08;&a&#xff09;为地址&#xff0c;就是把c指向的地址赋值给…

SaaS 应用如何助长网络犯罪

过去十年&#xff0c;软件即服务 (SaaS)的采用呈爆炸式增长&#xff0c;彻底改变了我们的工作方式。 从电子邮件平台到通信和协作应用程序&#xff0c;再到文件存储和共享服务&#xff0c;这些工具有望为我们的日常工作生活带来更大的灵活性和效率&#xff0c;尤其是在当今的远…

2.创建第一个MySQL存储过程(2/10)

引言 在现代数据库管理中&#xff0c;存储过程扮演着至关重要的角色。它们是一组为了执行特定任务而编写的SQL语句集合&#xff0c;这些语句被保存在数据库中&#xff0c;并且可以被多次调用执行。存储过程不仅可以提高数据库操作的效率&#xff0c;还能增强数据的安全性和一致…

unity 2d 近战攻击判定的三种方式

1. 给攻击帧添加碰撞盒 优点&#xff1a;配置直观&#xff0c;无需事件触发 缺点&#xff1a;无法定制&#xff0c;效率低 检测放在子物体&#xff0c;可以控制旋转 添加触发器事件 注意OnTriggerEnter2D只会在挂载了collider的组件上触发 protected virtual void OnTrigge…

降压芯片TPS54821

降压芯片TPS54821 介绍 价格低廉&#xff0c;只需1.5元。是一个同步整流降压BUCK电路。MOS管内置。输入电压为4.5V至17V&#xff0c;输出电压为0.6V到15V&#xff0c;输出电流最大到8A。是QFN封装&#xff0c;焊接时有些许困难。得益于QFN封装&#xff0c;其引线电感非常的小…

【深入理解SpringCloud微服务】手写实现断路器算法

【深入理解SpringCloud微服务】手写实现断路器算法 断路器状态切换断路器接口断路器算法实现相关属性failed()success()canPass() 断路器状态切换 在分析断路器算法前&#xff0c;我们先复习一下断路器的状态转换。 断路器一般有三个状态&#xff1a;关闭、打开、半开。 断路…

PP-Structure 快速入门

PP-Structure 快速入门 1. 环境准备2.快速使用2.1 命令行使用2.1.1 图像定位布局分析表格识别2.1.2 布局分析表格识别2.1.3 布局分析2.1.4 表格识别2.1.5 关键信息提取2.1.6 布局恢复2.2 python 脚本使用2.2.1 图像方向布局分析表格识别2.2.2 布局分析表格识别2.2.3 布局分析2…

正则表达式匹配英文字符

正则表达式匹配英文 20 个字符&#xff0c;包括大写&#xff0c;小写。 根据搜索结果&#xff0c;看到 honeymoose 分享过一个正则表达式的要求是: 匹配 20 个英文字符(大写、小写都包括)。 那么这个正则表达式可以写成: ^[a-zA-Z]{20}$解释一下: ^ 表示匹配字符串的开始[a-z…

pWnos1.0 靶机渗透 (Perl CGI 的反弹 shell 利用)

靶机介绍 来自 vulnhub 主机发现 ┌──(kali㉿kali)-[~/testPwnos1.0] …

EtherCAT 转 EtherNet/IP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899协议转换通信网关 EtherCAT 转 EtherNet/IP GW系列型号 MS-GW12 概述 MS-GW12 是 EtherCAT 和 EtherNet/IP 协议转换网关&#xff0c;为用户提供两…

基于Vue的汽车维修配件综合管理系统设计与实现SpringBoot后端源码

目录 1. 系统背景 2. 系统目标 3. 功能模块 4. 技术选型 5. 关键技术点 6. 实现步骤 7. 项目意义 8. 后期展望 1. 系统背景 市场需求分析&#xff1a;随着汽车保有量的不断增加&#xff0c;汽车维修和保养的需求日益增长。车主对维修质量和配件质量的要求也越来越高。汽…

安全防护检测数据集 3500张 PPE 动火 带标注 voc yolo 12类

安全防护检测数据集 3500张 PPE 动火 带标注 voc yolo 分类名: (图片张数&#xff0c; 标注个数) he Imet: (3649&#xff0c;10494) no_ goggles: (2197&#xff0c;4545) no_ mask: (2986&#xff0c; 6918) no_ vest: (2602&#xff0c; 7462) boots: (1802&#xff0c; 765…

VirtualBox虚拟机连接宿主机并能够上网(小白向)

现存问题 windows系统主要使用vmare和virtualbox两种虚拟机&#xff0c;virtualbox相对于vmare更加轻便&#xff0c;但少有博客能够详细说明使用virtualbox的教程。踩了网上的坑后&#xff0c;决定写一篇文章介绍virtualbox虚拟机上网的流程。 需求 1. virtualbox虚拟机与宿主机…

一篇文章搞懂Android 刷卡器对接:RS232 DB9串口通讯,通讯设置,刷卡器API介绍;代码示例;MDB协议;

目录 前言 在一些国家,还没有普及扫码支付的时候,消费者会纸币、硬币或者刷卡进行支付,这里我们讲解一下刷卡支付。 在市面上,有哪家刷卡器公司可以说的上是开通了很多国家的支付银行,那么Nayax和Pax可以说的上是名列前茅,他们适配了很多国家,对接其他国家的银行,让我…

ChatGPT 更新 Canvas 深度测评:论文写作这样用它!

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 ChatGPT又又更新了&#xff1a;基于ChatGPT 4o模型的Canvas 写作和代码功能。目前&#xff0c;仅针对Plus和Team用户。是一个独立的模块&#xff0c;如下所示&#xff1a; 官方…

ISO IEC 18004 2024/2015 Chinese 下载

ISO_IEC 18004 2024.pdf - 蓝奏云文件大小&#xff1a;40.3 M|https://610402220623.lanzouq.com/iqZ122bnx0yjISO IEC 18004-2015 zh-CN.pdf - 蓝奏云文件大小&#xff1a;34.1 M|https://610402220623.lanzouq.com/iEXSB2bnx0hc

G. Gears (2022 ICPC Southeastern Europe Regional Contest. )

G. Gears 思路&#xff1a; 本身这个题并不难&#xff0c;奈何卡了很久后看了题解才做出来&#xff0c;感觉自己好笨。 很容易想到的是&#xff0c;只要确定了一个齿轮的位置&#xff0c;其他齿轮的位置都可以直接推出来。所以当前目标是如何确定第一个齿轮的位置。 令 x [ i …

系统守护者:使用PyCharm与Python实现关键硬件状态的实时监控

目录 前言 系统准备 软件下载与安装 安装相关库 程序准备 主体程序 更改后的程序&#xff1a; 编写.NET程序 前言 在现代生活中&#xff0c;电脑作为核心工具&#xff0c;其性能和稳定性的维护至关重要。为确保电脑高效运行&#xff0c;我们不仅需关注软件优化&#xf…