news 2026/10/1 8:46:12

UVa 121 Pipe Fitters

作者头像

张小明

前端开发工程师

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

题目描述

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

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

输入为一系列矩形容器横截面的尺寸(单位是管道直径),每个尺寸由两个实数表示。输出对于每个横截面,能够容纳的最大管道数,以及达到该最大数时所采用的排列模式(grid\texttt{grid}grid或skew\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}(i−1)×23​​。
要求最后一行不能超出容器高度,即(layers−1)×32+1≤height(layers - 1) \times \frac{\sqrt{3}}{2} + 1 \le height(layers−1)×23​​+1≤height。
解得最多行数:

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

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

每行管道数
  • 奇数行(从第一行开始计数)管道数为⌊width⌋\lfloor width \rfloor⌊width⌋。
  • 偶数行管道数通常为⌊width⌋−1\lfloor width \rfloor - 1⌊width⌋−1,但若width−⌊width⌋≥0.5width - \lfloor width \rfloor \ge 0.5width−⌊width⌋≥0.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}grid和skew\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/29 9:37:26

Speechless:你的微博时光守护者,让珍贵记忆永不消逝

Speechless&#xff1a;你的微博时光守护者&#xff0c;让珍贵记忆永不消逝 【免费下载链接】Speechless 把新浪微博的内容&#xff0c;导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在这个信息爆炸的时代&am…

作者头像 李华
网站建设 2026/9/29 9:37:20

3分钟学会:浏览器直接预览Markdown文件的终极方案

3分钟学会&#xff1a;浏览器直接预览Markdown文件的终极方案 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 还在为无法在浏览器中直接查看Markdown文档而苦恼吗&#xff1f;Mar…

作者头像 李华
网站建设 2026/9/29 9:36:07

语音合成十年演进(2015–2025)

语音合成十年演进&#xff08;2015–2025&#xff09; 一句话总论&#xff1a; 2015年语音合成还是“统计参数合成&#xff08;SPSS&#xff09;HMM机械声”的机器人时代&#xff0c;2025年已进化成“万亿级多模态VLA大模型实时情感/意图级表达量子鲁棒自进化全语言/口语/歌唱统…

作者头像 李华
网站建设 2026/10/1 7:19:46

基于Java+SSM+Flask网络类课程思政学习系统(源码+LW+调试文档+讲解等)/网络课程/思政课程/学习系统/在线教育/思政学习/网络教育/课程思政/教育系统/在线课程/学习平台/思政系统,

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/9/29 9:36:08

Windows多用户远程桌面终极指南:RDP Wrapper完整配置教程

Windows多用户远程桌面终极指南&#xff1a;RDP Wrapper完整配置教程 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rdp/rdpwrap 还在为Windows官方远程桌面只能单用户登录而烦恼&#xff1f;RDP Wrapper Library这款开源神器…

作者头像 李华
网站建设 2026/9/29 9:36:07

AI+AR实时识别:如何快速搭建增强现实开发环境

AIAR实时识别&#xff1a;如何快速搭建增强现实开发环境 如果你是一名AR开发者&#xff0c;想要为应用添加实时物体识别功能&#xff0c;但苦于整合计算机视觉框架的复杂依赖和配置过程&#xff0c;那么这篇文章正是为你准备的。本文将介绍如何利用预配置的一站式解决方案&…

作者头像 李华