news 2026/9/22 15:06:58

UVa 121 Pipe Fitters

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 121 Pipe Fitters

题目描述

一家公司生产统一直径的管道,这些管道需要存储在矩形容器中。容器有不同尺寸,管道在容器内按行排列,同一行内管道紧贴(相切),行与行之间也紧贴(或紧贴容器底部)。
有两种排列方式:网格(grid\texttt{grid}grid交错(skew\texttt{skew}skew,如下图所示(题目中给出示意图):

  • 网格排列:管道按行列对齐排列。
  • 交错排列:管道在行与行之间交错排列,使得相邻行的管道位于间隙中。

输入为一系列矩形容器横截面的尺寸(单位是管道直径),每个尺寸由两个实数表示。输出对于每个横截面,能够容纳的最大管道数,以及达到该最大数时所采用的排列模式(grid\texttt{grid}gridskew\texttt{skew}skew)。如果两种模式结果相同,则输出grid

题目分析与解题思路

1. 网格排列(grid\texttt{grid}grid

在网格排列中,管道整齐地排成行和列。假设容器宽度为widthwidthwidth,高度为heightheightheight,那么能容纳的管道数为:

grid=⌊width⌋×⌊height⌋ grid = \lfloor width \rfloor \times \lfloor height \rfloorgrid=width×height

这里使用向下取整是因为管道是整数个,不能有部分管道。

2. 交错排列(skew\texttt{skew}skew

交错排列较为复杂,需要仔细计算行数和每行的管道数。

行数计算

在交错排列中,相邻两行的垂直距离为32\frac{\sqrt{3}}{2}23(因为管道直径为单位长度,三个管道中心构成等边三角形,高为32\frac{\sqrt{3}}{2}23)。
若第一行紧贴底部,那么第iii行的垂直位置为(i−1)×32(i-1) \times \frac{\sqrt{3}}{2}(i1)×23
要求最后一行不能超出容器高度,即(layers−1)×32+1≤height(layers - 1) \times \frac{\sqrt{3}}{2} + 1 \le height(layers1)×23+1height
解得最多行数:

layers=⌊2(height−1)3⌋+1 layers = \left\lfloor \frac{2(height - 1)}{\sqrt{3}} \right\rfloor + 1layers=32(height1)+1

注意若height<1height < 1height<1,则无法放置任何管道。

每行管道数
  • 奇数行(从第一行开始计数)管道数为⌊width⌋\lfloor width \rfloorwidth
  • 偶数行管道数通常为⌊width⌋−1\lfloor width \rfloor - 1width1,但若width−⌊width⌋≥0.5width - \lfloor width \rfloor \ge 0.5widthwidth0.5,则偶数行也可以放下与奇数行相同数量的管道。这是因为交错排列中偶数行管道会向左偏移0.50.50.5个单位,若剩余空间足够,则可多放一个。
总管道数

设奇数行有oddRows=⌈layers/2⌉oddRows = \lceil layers / 2 \rceiloddRows=layers/2,偶数行有evenRows=⌊layers/2⌋evenRows = \lfloor layers / 2 \rfloorevenRows=layers/2,则总数为:

skew=oddRows×pipesPerOddRow+evenRows×pipesPerEvenRow skew = oddRows \times pipesPerOddRow + evenRows \times pipesPerEvenRowskew=oddRows×pipesPerOddRow+evenRows×pipesPerEvenRow

注意

由于容器可以旋转,因此需要计算skew(width,height)skew(width, height)skew(width,height)skew(height,width)skew(height, width)skew(height,width)并取最大值。

3. 比较与输出

比较网格排列和交错排列的最大管道数,输出较大者及其模式;若相等则输出grid

代码实现

// Pipe Fitters// UVa ID: 121// Verdict: Accepted// Submission Date: 2011-12-18// UVa Run Time: 0.056s//// 版权所有(C)2011,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intgrid(doublewidth,doubleheight){intnGrid=0;nGrid=floor(width)*floor(height);returnnGrid;}intskew(doublewidth,doubleheight){if(height<1.0)return0;intlayers=floor(2.0*(height-1.0)/sqrt(3.0)+1.0);intpipes_per_odd_full_row=floor(width);intpipes_per_even_full_row=pipes_per_odd_full_row-1;if((width-pipes_per_odd_full_row)>=0.5)pipes_per_even_full_row=pipes_per_odd_full_row;intnSkew=ceil(layers/2.0)*pipes_per_odd_full_row+floor(layers/2.0)*pipes_per_even_full_row;returnnSkew;}intmain(intac,char*av[]){doublea,b;while(cin>>a>>b){intnGrid=grid(a,b);intnSkew=max(skew(a,b),skew(b,a));if(nGrid>=nSkew)cout<<nGrid<<" grid"<<endl;elsecout<<nSkew<<" skew"<<endl;}return0;}

复杂度分析

对于每个输入尺寸,计算grid\texttt{grid}gridskew\texttt{skew}skew均为常数时间操作,因此总时间复杂度为O(1)O(1)O(1)每个测试用例,整体为O(n)O(n)O(n),其中nnn为测试用例数。空间复杂度为O(1)O(1)O(1)

总结

本题主要考察几何建模和取整运算。关键在于理解交错排列的行距与每行管道数的计算,并正确处理浮点数比较与取整。通过分别计算两种排列方式的管道数并比较,即可得到答案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 3:27:55

5分钟掌握文件秒传:永久分享终极指南

5分钟掌握文件秒传&#xff1a;永久分享终极指南 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否曾经因为文件分享链接失效而烦恼&#xff1f;是否想…

作者头像 李华
网站建设 2026/9/16 15:06:13

终极省时方案:利用云端GPU快速测试多种识别模型

终极省时方案&#xff1a;利用云端GPU快速测试多种识别模型 作为一名经常需要测试不同物体识别模型的AI研究员&#xff0c;我深刻体会到本地环境配置的繁琐——每次切换模型都要重新安装依赖、解决版本冲突&#xff0c;甚至可能因为显存不足而无法运行。本文将分享如何通过云端…

作者头像 李华
网站建设 2026/9/22 5:51:52

懒人专属:5步搞定中文万物识别API服务部署

懒人专属&#xff1a;5步搞定中文万物识别API服务部署 作为一名独立开发者&#xff0c;你是否也遇到过这样的困扰&#xff1a;想为智能相册添加自动标注功能&#xff0c;却被服务器租用和模型部署的复杂流程劝退&#xff1f;今天我要分享的这套方案&#xff0c;能让你像使用Saa…

作者头像 李华
网站建设 2026/9/16 15:06:20

m4s转MP4工具:高效解决B站缓存视频兼容性问题

m4s转MP4工具&#xff1a;高效解决B站缓存视频兼容性问题 【免费下载链接】m4s-converter 将bilibili缓存的m4s转成mp4(读PC端缓存目录) 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在当今数字内容消费时代&#xff0c;B站作为重要的视频平台&#xff…

作者头像 李华
网站建设 2026/9/16 15:06:15

中文细粒度识别实战:快速搭建专业领域分类系统

中文细粒度识别实战&#xff1a;快速搭建专业领域分类系统 在工业质检场景中&#xff0c;通用图像识别模型往往难以满足对细微缺陷的检测需求。本文将介绍如何利用预置镜像快速搭建专业领域分类系统&#xff0c;帮助工程师专注于数据处理和模型微调&#xff0c;而无需从零开始配…

作者头像 李华
网站建设 2026/9/22 3:05:41

Traymond:让Windows窗口管理变得前所未有的简单高效

Traymond&#xff1a;让Windows窗口管理变得前所未有的简单高效 【免费下载链接】traymond A simple Windows app for minimizing windows to tray icons 项目地址: https://gitcode.com/gh_mirrors/tr/traymond 在现代工作环境中&#xff0c;我们经常需要同时处理多个任…

作者头像 李华