当前位置: 首页 > article >正文

UVa 273 Jack Straws

题目分析本题的题目背景源自一种名为 “Jack Straws\texttt{Jack Straws}Jack Straws” 的游戏玩家需要从桌上一堆杂乱摆放的塑料或木质 “稻草” 中逐根取出而不扰动其他稻草。本题不关心游戏过程只关心一个问题给定若干根稻草视为二维平面上的线段以及多组询问(a,b)(a, b)(a,b)判断稻草aaa和稻草bbb是否 “连通”。“连通” 的定义包含两个层面直接连通两根稻草在平面上有公共点即线段相交此时称它们直接相连。间接连通如果稻草aaa与稻草ccc直接相连且稻草ccc与稻草bbb直接相连则aaa与bbb间接连通。连通关系具有传递性。此外一根稻草与自身视为连通。输入格式较为特殊有多组测试数据每组数据以nnn开头1n131 n 131n13随后nnn行每行给出四个正整数x1,y1,x2,y2x_1, y_1, x_2, y_2x1​,y1​,x2​,y2​表示一根稻草的两个端点坐标。接着是多行询问每行包含两个正整数a,ba, ba,b以0 0作为询问结束标志。输出时每组测试数据之间需要用空行分隔。解题思路本题的核心可以分解为三个步骤判断任意两根稻草是否直接相连线段相交判断。根据直接相连关系计算所有稻草之间的连通性传递闭包。对每个询问O(1)O(1)O(1)时间输出连通性结果。第一步线段相交判断两根稻草在平面上均为线段我们需要判断它们是否相交。线段相交的情况包括规范相交两条线段在内部非端点相交。非规范相交相交于端点或一条线段端点在另一条线段上。由于题目保证没有零长度稻草我们不需要处理退化为点的情况。判断线段相交的常用方法是跨立实验结合矩形快速排斥。设线段ABABAB和CDCDCD则快速排斥两个线段的外接矩形必须有重叠否则不可能相交。这一步可以提前过滤掉明显不相交的情况。在实现中快速排斥通常被包含在点是否在矩形内的判断中。跨立实验对于线段ABABAB和CDCDCD要求点CCC和点DDD位于直线ABABAB的两侧且点AAA和点BBB位于直线CDCDCD的两侧。用叉积判断方向d1AB→×AC→d_1 \overrightarrow{AB} \times \overrightarrow{AC}d1​AB×ACd2AB→×AD→d_2 \overrightarrow{AB} \times \overrightarrow{AD}d2​AB×ADd3CD→×CA→d_3 \overrightarrow{CD} \times \overrightarrow{CA}d3​CD×CAd4CD→×CB→d_4 \overrightarrow{CD} \times \overrightarrow{CB}d4​CD×CB如果d1⋅d20d_1 \cdot d_2 0d1​⋅d2​0且d3⋅d40d_3 \cdot d_4 0d3​⋅d4​0则规范相交。端点相交处理如果某个叉积为零说明对应点在另一条线段所在直线上此时还需用点是否在线段上判断即点在矩形范围内。这是处理非规范相交的关键。为什么选择这种方案n13n 13n13非常小即使对所有稻草对进行O(n2)O(n^2)O(n2)的相交检测也毫无压力。线段相交判断逻辑清晰且能正确处理端点接触的情况满足题目 “触碰即连通” 的要求。第二步传递闭包计算得到直接相连关系后我们需要求出连通关系的传递闭包。由于n≤12n \le 12n≤12可以用Floyd-Warshall\texttt{Floyd-Warshall}Floyd-Warshall算法的变种将连通性视作n×nn \times nn×n的布尔矩阵connected[i][j]。初始化若线段iii与线段jjj直接相交包括ijijij则connected[i][j] true。三重循环for k in [0, n-1]for i in [0, n-1]for j in [0, n-1]若connected[i][k] connected[k][j]成立则connected[i][j] true。时间复杂度为O(n3)O(n^3)O(n3)n≤12n \le 12n≤12时完全可接受。为什么不直接DFS\texttt{DFS}DFS或BFS\texttt{BFS}BFS虽然nnn很小但询问次数未知。预处理出所有对之间的连通性后每个询问只需O(1)O(1)O(1)输出效率更高。第三步处理询问与输出格式输入询问时连续读取a,ba, ba,b直到遇到0 0。输出时注意每组测试数据之间有一个空行。第一个测试数据前不输出空行。代码实现// Jack Straws// UVa ID: 273// Verdict: Accepted// Submission Date: 2016-05-15// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 点结构体structpoint{intx,y;};// 线段结构体structsegment{point start,end;};// 判断点 p 是否在线段 ab 的包围盒内boolpointInBox(point p,point a,point b){return((p.xmin(a.x,b.x))(p.xmax(a.x,b.x))(p.ymin(a.y,b.y))(p.ymax(a.y,b.y)));}// 计算叉积(b - a) × (c - a)doubledirection(point a,point b,point c){return(b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);}// 判断两条线段是否相交包括端点接触boolsegmentsIntersect(segment a,segment b){doubled1,d2,d3,d4;d1direction(a.start,a.end,b.start);d2direction(a.start,a.end,b.end);d3direction(b.start,b.end,a.start);d4direction(b.start,b.end,a.end);// 规范相交互相跨立if((d1*d20)(d3*d40))returntrue;// 非规范相交端点重合或端点在另一线段上if(d10pointInBox(b.start,a.start,a.end))returntrue;if(d20pointInBox(b.end,a.start,a.end))returntrue;if(d30pointInBox(a.start,b.start,b.end))returntrue;if(d40pointInBox(a.end,b.start,b.end))returntrue;returnfalse;}intmain(intargc,char*argv[]){boolfirsttrue;// 控制输出空行intcases;cincases;while(cases--){intn,x1,y1,x2,y2;cinn;// 存储所有稻草vectorsegmentsegments;for(inti1;in;i){cinx1y1x2y2;segments.push_back((segment){(point){x1,y1},(point){x2,y2}});}// 初始化连通矩阵boolconnected[13][13];for(inti0;in;i)for(intj0;jn;j)connected[i][j]false;// 根据线段相交关系填充直接连通性for(inti0;isegments.size();i)for(intj0;jsegments.size();j)if(segmentsIntersect(segments[i],segments[j]))connected[i][j]true;// Floyd-Warshall 求传递闭包for(intk0;kn;k)for(inti0;in;i)for(intj0;jn;j)if(connected[i][k]connected[k][j])connected[i][j]true;// 控制两组数据之间的空行if(first)firstfalse;elsecoutendl;// 处理询问inta,b;while(cinab,ab)cout(connected[a-1][b-1]?CONNECTED:NOT CONNECTED)endl;}return0;}总结本题是一道典型的计算几何与图论结合的题目。核心难点在于正确判断两条线段是否相交特别是端点接触的情况。由于数据规模极小我们可以直接使用O(n3)O(n^3)O(n3)的Floyd-Warshall\texttt{Floyd-Warshall}Floyd-Warshall算法计算传递闭包从而高效地回答所有连通性询问。解题时注意输出格式特别是多组数据之间的空行处理。

相关文章:

UVa 273 Jack Straws

题目分析 本题的题目背景源自一种名为 “Jack Straws\texttt{Jack Straws}Jack Straws” 的游戏,玩家需要从桌上一堆杂乱摆放的塑料或木质 “稻草” 中逐根取出,而不扰动其他稻草。本题不关心游戏过程,只关心一个问题:给定若干根稻…...

捡垃圾实战:让ESXi 7.0 U3识别老古董Mellanox ConnectX-2 10G网卡(附驱动修改全流程)

老硬件焕新:ESXi 7.0 U3下Mellanox ConnectX-2网卡驱动改造指南 在二手市场以几十元价格淘到的Mellanox ConnectX-2 10G双口网卡,性能依然强劲,却因为官方停止支持而无法在现代虚拟化平台上使用。本文将带你深入探索如何通过驱动改造&#xf…...

Spring Boot项目实战:手把手教你集成银联B2B无卡支付(SM2国密证书版)

Spring Boot实战:银联B2B无卡支付集成全流程解析(SM2国密证书版) 在企业级应用开发中,支付功能是不可或缺的核心模块。银联B2B无卡支付作为国内企业间交易的重要渠道,其安全性和稳定性备受开发者关注。本文将带你从零开…...

CentOS 7上搞定Dell iDRAC Service Module安装报错(附usbutils依赖解决)

CentOS 7上解决Dell iDRAC Service Module安装依赖问题的实战指南 当你在CentOS 7系统上尝试安装Dell iDRAC Service Module时,可能会遇到各种依赖问题导致安装失败。本文将深入剖析最常见的usbutils依赖报错及其解决方案,同时提供一系列实用技巧帮助你顺…...

茉莉花插件:5分钟解决Zotero中文文献管理三大难题

茉莉花插件:5分钟解决Zotero中文文献管理三大难题 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为中文文献管理…...

保姆级教程:在Ubuntu 22.04上配置VNC Server,并用VNC Viewer远程桌面(解决加密报错)

深度解析Ubuntu 22.04 VNC远程桌面配置与加密协议调优实战 在分布式开发和远程协作成为主流的今天,掌握高效的远程桌面技术已成为开发者和运维人员的必备技能。Ubuntu作为最受欢迎的Linux发行版之一,其内置的VNC服务为远程访问提供了原生支持&#xff0c…...

用PyTorch手把手实现PGD对抗训练:从FGM的‘一步到位’到‘小步快跑’的实战代码详解

用PyTorch手把手实现PGD对抗训练:从FGM的‘一步到位’到‘小步快跑’的实战代码详解 对抗训练已成为提升模型鲁棒性的核心技术之一。不同于FGM(Fast Gradient Method)的"一步到位"策略,PGD(Projected Gradie…...

AI Agent智能体技术:从问答到执行的范式革命

标签:AI Agent、大模型、智能体、LangChain、ReAct、Function Calling 📖 前言 2026年5月20日,谷歌I/O 2026大会在美国加州山景城开幕。谷歌CEO桑达尔皮查伊(Sundar Pichai)在大会上宣布:“我们已正式进入’智能体Gemini时代’。”就在同一天,百度Create 2026大会上,…...

模块型OLT跟光模块有什么区别?

模块型OLT跟光模块有什么区别?明明是同一个 SFP 接口,插上去长得也差不多,为什么有的叫“光模块”,有的叫“模块型 OLT”? 它们到底有什么区别?能不能互换?选错了会怎样?同样是 SFP …...

从AB类到C类:拆解Doherty功放里载波与峰值支路的相位“打架”问题及宽带补偿方案

从AB类到C类:拆解Doherty功放里载波与峰值支路的相位“打架”问题及宽带补偿方案 在射频功率放大器设计中,Doherty架构因其高效率特性而备受青睐。然而,当工程师们试图将这种架构扩展到更宽频带时,往往会遇到一个令人头疼的问题—…...

手把手教你用AD9834 DDS模块DIY一个可调信号源(附AD原理图/PCB/程序)

从零构建AD9834 DDS可调信号源:硬件搭建与软件调优全指南 在电子设计与射频实验中,一个稳定可靠的可调信号源是不可或缺的工具。商用信号发生器往往价格昂贵,而基于AD9834 DDS模块的DIY方案,能以极低成本实现0-10MHz频率范围内的高…...

告别命令行!用VSCode插件一键搞定ESP-IDF环境(ESP32/S3保姆级教程)

告别命令行!用VSCode插件一键搞定ESP-IDF环境(ESP32/S3保姆级教程) 当一块崭新的ESP32开发板躺在桌面上时,许多开发者会陷入两难:既渴望体验这款低功耗Wi-Fi/蓝牙双模芯片的强大性能,又对繁琐的环境配置望而…...

从main.cc到五大视图:手把手拆解QGC的UI启动流程(附QML与C++交互实例)

从main.cc到五大视图:手把手拆解QGC的UI启动流程(附QML与C交互实例) 当你第一次打开QGroundControl(QGC)时,那个简洁而功能强大的界面背后,隐藏着一套精妙的启动机制。作为一款广泛应用于无人机…...

CH347玩转双模式:一篇教程搞定JTAG和SWD对STM32的调试与下载

CH347双模式实战指南:JTAG与SWD高效切换玩转STM32开发 第一次接触CH347这颗多功能接口芯片时,我正被手头几个不同调试接口的项目折腾得焦头烂额。有的客户板子只留了SWD接口,有的老项目又必须用JTAG,来回切换调试器不仅麻烦&#…...

逆向思维拆解:我是如何通过AST“翻译”极验4混淆代码的逻辑的(含控制流平坦化详解)

逆向工程实战:用AST解析技术破解JavaScript混淆的艺术 当面对一团被精心混淆过的JavaScript代码时,就像侦探面对加密的线索——每个字符都可能是关键,每个变量名都可能是陷阱。本文将带你走进AST(抽象语法树)的世界&am…...

从零到一:基于Linux平台与华中8型数控系统,构建车间级数据采集监控看板

从零到一:基于Linux平台与华中8型数控系统构建车间级数据采集监控看板 在工业4.0的浪潮下,车间级数据采集与可视化已成为智能制造转型的核心环节。传统单机Windows方案往往面临扩展性差、维护成本高等痛点,而基于Linux平台的分布式架构正成为…...

别再乱调了!用Audition参数均衡器拯救你的干音(附实战预设)

别再乱调了!用Audition参数均衡器拯救你的干音(附实战预设) 录制完一段音频后,你是否经常遇到这样的困扰:人声听起来闷闷的像隔了层棉被,或是尖锐刺耳到让人皱眉,又或者整体浑浊不清缺乏层次感&…...

从BJT到CMOS:运放偏置电流的前世今生,以及它对高阻抗传感器电路设计的实际影响

从BJT到CMOS:运放偏置电流的前世今生,以及它对高阻抗传感器电路设计的实际影响 在精密测量领域,运算放大器的偏置电流就像一位隐形的"电流小偷",悄无声息地影响着测量精度。想象一下,当你试图测量一个微弱的…...

手把手教你用SPI在两块STM32之间传浮点数(附避坑指南和字符串转换技巧)

手把手教你用SPI在两块STM32之间传浮点数(附避坑指南和字符串转换技巧) 在物联网传感器数据采集场景中,温湿度等模拟量通常以浮点数形式存在。当我们需要通过SPI协议在STM32主从机之间传输这类数据时,开发者往往会遇到小数位丢失、…...

告别静态分析!用R包SetMethods搞定面板数据QCA的三大一致性(附代码实战)

动态QCA实战指南:用R包SetMethods破解面板数据三大一致性难题 社会科学研究者常面临一个核心挑战:如何从随时间变化的面板数据中提取稳定可靠的因果模式?传统横截面QCA分析往往无法捕捉时间或个体效应,导致结论缺乏稳健性。本文将…...

STM32H750 ADC性能调优指南:牺牲分辨率换速度?快速转换模式深度实测

STM32H750 ADC性能调优实战:如何在速度与精度间找到最佳平衡点 最近在做一个电机控制项目时,遇到了一个棘手的问题——ADC采样速度跟不上PWM频率的变化。当我尝试将PWM频率提升到20kHz以上时,系统开始出现明显的控制延迟。这个问题让我不得不…...

告别手动分割!用Python脚本一键生成VOC数据集所需的train.txt和val.txt

告别手动分割!用Python脚本一键生成VOC数据集所需的train.txt和val.txt 在计算机视觉项目中,数据集的准备往往是耗时最长的环节之一。特别是当我们需要按照VOC格式整理数据集时,手动分割训练集、验证集不仅效率低下,还容易引入人为…...

别再只用默认样式了!手把手教你定制LVGL Bar进度条的3种高级视觉效果

突破视觉边界:LVGL进度条高级定制技法三则 在嵌入式UI开发领域,LVGL以其轻量级和高度可定制性赢得了众多开发者的青睐。但当我们超越基础功能实现,进入视觉表现力的深水区时,这个开源图形库的真正魅力才开始显现。进度条作为人机交…...

安科士(AndXe)SPF-10G-T :10G 电口模块,重塑短距网络升级性价比

数字化转型浪潮下,企业园区、数据中心对10Gbps 高速互联的需求呈爆发式增长。但传统 10G 升级方案深陷困境:光纤布线成本高昂、施工周期长且需专业运维技能,而多数企业机架内、相邻机架间及办公楼层内的链路距离普遍低于 30 米,光…...

5分钟掌握终极音乐解密方案:Unlock Music Electron完整指南

5分钟掌握终极音乐解密方案:Unlock Music Electron完整指南 【免费下载链接】unlock-music-electron Unlock Music Project - Electron Edition 在Electron构建的桌面应用中解锁各种加密的音乐文件 项目地址: https://gitcode.com/gh_mirrors/un/unlock-music-ele…...

Hive 3.1.3部署后,你可能会遇到的3个连接与权限报错及解决实录

Hive 3.1.3部署后三大经典连接与权限问题深度解析 当你终于按照教程完成Hive 3.1.3的安装,却在最后连接阶段遭遇各种"拦路虎"时,那种挫败感我深有体会。本文将带你直击三个最具代表性的连接与权限问题,从报错现象到根因分析&#x…...

TranslucentTB:让Windows任务栏变透明的终极指南

TranslucentTB:让Windows任务栏变透明的终极指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Windows任务栏那…...

告别CubeMX思维定式:用S32DS的Processor Expert玩转S32K144外设配置(含FreeRTOS组件添加)

从CubeMX到Processor Expert:S32K144高效开发实战指南 在嵌入式开发领域,工具链的选择往往决定了开发效率的上限。对于习惯了ST生态的开发者来说,CubeMX的图形化配置已成为肌肉记忆般的操作。但当项目需求将我们推向NXP的S32K系列时&#xff…...

HeyGen免费额度怎么用最值?我用1个积分做了个多语言口播视频(附保姆级教程)

HeyGen免费额度高效使用指南:1积分打造多语言口播视频 第一次接触HeyGen时,我被它逼真的口型同步技术震撼了——直到发现免费账户只有1个积分。这就像得到一颗钻石却只能刮一次玻璃。经过两周的反复测试,我总结出一套**"1积分最大化&quo…...

从手机镜头到AR眼镜:几何光学三大定律如何塑造你身边的成像技术

从手机镜头到AR眼镜:几何光学三大定律如何塑造你身边的成像技术 当你用手机拍下一张照片,或是戴上AR眼镜看到虚拟与现实融合的世界时,背后其实隐藏着几个世纪前就被发现的物理定律。这些看似高深的光学原理,正以最直接的方式影响…...