UVa 1523 Helicopter
题目描述给定888个整数表示888位乘客的重量。直升机有888个座位分布在螺旋桨中心的周围每个座位的横向坐标和纵向坐标分别为−1-1−1、000或111且不包含(0,0)(0,0)(0,0)。规定左侧乘客产生正横向力矩右侧产生负横向力矩前方乘客产生正纵向力矩后方产生负纵向力矩。第iii个座位的横向力矩Mviwi⋅xiMv_i w_i \cdot x_iMvi​wi​⋅xi​纵向力矩Mhiwi⋅yiMh_i w_i \cdot y_iMhi​wi​⋅yi​其中(xi,yi)(x_i, y_i)(xi​,yi​)为座位的坐标wiw_iwi​为该座位乘客的重量。合力矩定义为M(∑i18Mvi)2(∑i18Mhi)2 M \sqrt{\left(\sum_{i1}^{8} Mv_i\right)^2 \left(\sum_{i1}^{8} Mh_i\right)^2}M(i1∑8​Mvi​)2(i1∑8​Mhi​)2​任务是将888个重量分配到888个座位上使得MMM最小。输入格式输入包含多个测试用例。每个测试用例为一行包含888个整数表示888位乘客的重量。输入以888个整数全为000的测试用例结束该用例不处理。输出格式对于每个测试用例输出一行包含一个实数表示最优安排下的合力矩MMM。结果保留333位小数。输出中不得包含多余空格或空行。样例输入1 2 3 4 5 6 7 8 0 0 0 0 0 0 0输出0.000题目分析本题的核心是给定888个重量值将它们一一映射到固定的888个坐标上使由重量和坐标共同决定的合力矩MMM最小。由于座位坐标固定每个乘客的力矩贡献只取决于其重量和所在座位的坐标。总横向力矩Sv∑wixiS_v \sum w_i x_iSv​∑wi​xi​总纵向力矩Sh∑wiyiS_h \sum w_i y_iSh​∑wi​yi​目标是最小化Sv2Sh2\sqrt{S_v^2 S_h^2}Sv2​Sh2​​。因为只有888个座位所有可能的分配方案数为8!403208! 403208!40320这个数量非常小完全可以通过暴力枚举所有排列来求解。每个测试用例只需枚举所有排列计算对应的SvS_vSv​和ShS_hSh​并更新最小值即可。本题没有隐藏的复杂性质直接枚举即可通过。时间复杂度和空间复杂度均很低。解题思路坐标定义将888个座位的坐标预先存储在数组中例如按顺序为(−1,−1)(-1,-1)(−1,−1)、(−1,0)(-1,0)(−1,0)、(−1,1)(-1,1)(−1,1)、(0,−1)(0,-1)(0,−1)、(0,1)(0,1)(0,1)、(1,−1)(1,-1)(1,−1)、(1,0)(1,0)(1,0)、(1,1)(1,1)(1,1)。这些坐标的横向值xxx和纵向值yyy分别表示座位相对螺旋桨的横向和纵向距离。枚举排列对每个测试用例读取888个重量后将重量数组排序便于使用std::next_permutation然后使用do-while循环遍历所有排列。对于每个排列将重量依次与预定义的坐标相乘累加得到SvS_vSv​和ShS_hSh​计算MSv2Sh2M \sqrt{S_v^2 S_h^2}MSv2​Sh2​​并与当前最优值比较保留较小者。精度处理由于坐标和重量均为整数SvS_vSv​和ShS_hSh​为整数MMM为浮点数。使用double类型存储输出时使用fixed和setprecision(3)保留三位小数。输入终止读取888个整数后检查是否全为000若是则结束循环。代码实现// Helicopter// UVa ID: 1523// Verdict: Accepted// Submission Date: 2026-06-20// UVa Run Time: 0.370s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 计算给定重量排列下的合力矩doublecalcMoment(constvectorintweights,constvectorpairint,intseats){intsumV0,sumH0;for(inti0;i8;i){sumVweights[i]*seats[i].first;sumHweights[i]*seats[i].second;}returnsqrt((double)sumV*sumV(double)sumH*sumH);}intmain(){// 8个座位的坐标相对于螺旋桨中心vectorpairint,intseats{{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};vectorintweights(8);while(true){boolallZerotrue;for(inti0;i8;i){cinweights[i];if(weights[i]!0)allZerofalse;}if(allZero)break;// 结束标记sort(weights.begin(),weights.end());doublebest1e100;do{doublecurcalcMoment(weights,seats);if(curbest)bestcur;}while(next_permutation(weights.begin(),weights.end()));coutfixedsetprecision(3)bestendl;}return0;}总结本题是一个典型的全排列枚举问题数据规模极小8!403208! 403208!40320直接枚举即可。关键点在于正确理解力矩的计算方式并将每个座位的坐标与乘客重量对应。实际编程中使用std::next_permutation可以方便地遍历所有排列注意先对重量排序以确保遍历所有不同排列。时间复杂度为O(T⋅8!⋅8)O(T \cdot 8! \cdot 8)O(T⋅8!⋅8)其中TTT为测试用例数完全满足题目要求。此类问题提醒我们在数据范围较小时暴力枚举往往是最简单且高效的解决方法。

相关新闻

CSDN原力榜185:AI原生系统8层全拆

CSDN原力榜185:AI原生系统8层全拆

多数人看到"AI 写的文章冲上 CSDN 原力榜 185 名",第一反应是:是不是用了什么神级提示词? 不是。 我用的模型很普通,提示词也不神秘。真正让我从月排名 693 一路爬到 185 的,是把"写文章"这件事当…

2026/11/13 17:01:17 阅读更多 →
Claude写前端组件提示词从普通版到进阶版怎么写

Claude写前端组件提示词从普通版到进阶版怎么写

配备AI智能聊天功能, 拥有问答助手特性, 具备AI智能搜索能力, 借助多模态理解力助力, 帮你轻松跨越以0为起始点抵达1的创作门槛。你要去促使产生那契合真实项目规范的前端组件代码, 并非单单只是那种能够运行得通的玩具示例。常理下的提示词通常会致使输出出现缺少props定义的情…

2026/10/24 9:02:20 阅读更多 →
Spatix点云数据处理实操案例对比

Spatix点云数据处理实操案例对比

通用参数DEM参数等高线参数生成的等高线对比图断面对比图

2026/11/3 19:28:50 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻