UVa 364 Constitutional Computing
题目描述美国宪法规定众议员名额应按各州人口比例分配且每州至少一名。但由于人口并非除得尽实际分配必须给每个州一个正整数个席位。本题要求对给定的若干州的人口数和目标总席位数分别用四种经典分配方法Hamilton\texttt{Hamilton}Hamilton、Jefferson\texttt{Jefferson}Jefferson、Adams\texttt{Adams}Adams、Webster\texttt{Webster}Webster计算每个州的席位数并指出对于每个州哪种方法如果有给予该州的席位严格多于其他方法。具体地有nnn个州n≤50n \le 50n≤50每个州有唯一名称恰好555个字符和正整数人口。对于每个目标总席位数HHHH≥nH \ge nH≥n输出每个州的比较结果。输入格式输入包含多组数据。每组数据第一行为州数nnn。若n0n 0n0则输入结束。接下来nnn行每行一个州名恰好555个字符从第111列开始和一个正整数人口二者之间至少一个空格。之后是一行或多行整数每行一个目标席位数HHH。输入以单独的000表示该组数据的HHH列表结束。保证HHH不小于州数nnn。输出格式对于每组数据先输出Data set k:kkk从111开始。对于每个目标席位数HHH输出一行For H representatives:对每个州按输入顺序输出一行格式为若所有方法得到的席位数相同则输出州名 is favored by no method.否则输出州名 is favored by 方法1 and 方法2 ... .其中方法名按固定顺序Hamilton、Jefferson、Adams、Webster列出所有达到最大值的那些方法方法名之间用and连接末尾句点。每个HHH的输出后跟一个空行。样例输入5 Anxit 42 Bored 178 Confu 221 Dismy 117 Ecsta 72 30 5 0 0输出Data set 1: For 30 representatives: Anxit is favored by no method. Bored is favored by Jefferson. Confu is favored by Hamilton and Jefferson and Webster. Dismy is favored by Hamilton and Adams and Webster. Ecsta is favored by Adams. For 5 representatives: Anxit is favored by no method. Bored is favored by no method. Confu is favored by no method. Dismy is favored by no method. Ecsta is favored by no method.题目分析本题的核心是议席分配问题。给定总人口total\textit{total}total和目标席位数HHH一个“公平”的理想分配是每个州获得popi×H/total\textit{pop}_i \times H / \textit{total}popi​×H/total个席位但该值通常非整数。四种方法以不同方式将小数部分“舍入”或“调整”使得总和恰好为HHH。各方法原理Hamilton\texttt{Hamilton}Hamilton最大余数法先取每个州配额的整数部分保证至少111席剩余席位按小数部分从大到小分配。这是一种直观且符合直觉的方法但可能产生“阿拉巴马悖论”增加总席位反致某些州席位减少但本题无需考虑。Jefferson\texttt{Jefferson}Jefferson向下取整除数法寻找一个除数ddd使得对每个州⌊popi/d⌋\lfloor \textit{pop}_i / d \rfloor⌊popi​/d⌋的和等于HHH。等价于“最高均值法”中分母为(当前席位数1)(\text{当前席位数}1)(当前席位数1)的分配过程初始每州111席反复将下一个席位给popi/(当前席位数1)\textit{pop}_i / (\text{当前席位数}1)popi​/(当前席位数1)最大的州。Adams\texttt{Adams}Adams向上取整除数法寻找除数ddd使得⌈popi/d⌉\lceil \textit{pop}_i / d \rceil⌈popi​/d⌉的和等于HHH。等价于分母为当前席位数\text{当前席位数}当前席位数的最高均值法。Webster\texttt{Webster}Webster四舍五入除数法寻找除数ddd使得popi/d\textit{pop}_i / dpopi​/d按四舍五入后求和等于HHH。等价于分母为(2×当前席位数1)(2 \times \text{当前席位数} 1)(2×当前席位数1)的最高均值法Sainte‑Laguë 方法。由于HHH可能远大于nnn直接枚举除数不可行。但最高均值法用优先队列模拟分配过程每次只增加一个席位复杂度O((H−n)log⁡n)O((H-n) \log n)O((H−n)logn)在本题HHH大小未明确但显然可接受输入规模小。比较规则对于每个州需要比较四种方法返回的席位数。如果所有方法的数值相同则没有任何方法“给予更多”否则找出最大值列出所有达到该最大值的方法名。注意必须严格大于其他方法即如果最大值出现多次并列第一这些并列的方法都应列出因为它们都比未达到最大值的其他方法多。解题思路总体框架读入州数据。对于每个目标席位数HHH分别用四种方法计算各州席位。对每个州比较四个值按规则输出。各方法实现细节Hamilton\texttt{Hamilton}Hamilton方法计算总人口total使用long long。对每个州iii计算乘积prod pop[i] * H整数部分q prod / total余数rem prod % total。初始席位为max(1, q)并累加已分配数。将余数即小数部分按从大到小排序只考虑“真实配额 ≥ 1”的州即prod total依次给这些州加111席直到剩余席位分配完毕。注意当q 0时已保证至少111席但该州在余数分配时不参与因为配额小于111的州不应获得额外席位。Jefferson\texttt{Jefferson}Jefferson、Adams\texttt{Adams}Adams、Webster\texttt{Webster}Webster方法三者统一用优先队列最大堆模拟最高均值法初始每个州分配111席题目保证H≥nH \ge nH≥n。定义“价值”函数Jefferson\texttt{Jefferson}Jeffersonvaluepop/(当前席位1)\textit{value} \textit{pop} / (\text{当前席位} 1)valuepop/(当前席位1)Adams\texttt{Adams}Adamsvaluepop/当前席位\textit{value} \textit{pop} / \text{当前席位}valuepop/当前席位Webster\texttt{Webster}Webstervaluepop/(2×当前席位1)\textit{value} \textit{pop} / (2 \times \text{当前席位} 1)valuepop/(2×当前席位1)重复H−nH-nH−n次弹出当前价值最大的州为其增加111席重新计算该州新价值并压入堆。由于每次弹出后该州的价值会变化优先队列中可能残留旧值。在弹出时检查该值是否仍等于该州当前的实际价值用极小误差比较若不是则丢弃并继续弹出。比较与输出对每个州获得四个整数数组h[i]、j[i]、a[i]、w[i]。计算最大值mx和最小值mn。若mx mn说明全部相等输出no method否则按顺序检查四个值若等于mx则记录方法名。输出时用and连接。复杂度分析每次Hamilton\texttt{Hamilton}Hamilton计算O(nlog⁡n)O(n \log n)O(nlogn)排序余数。每次最高均值法模拟O((H−n)log⁡n)O((H-n) \log n)O((H−n)logn)但HHH在输入中未给出上界但n≤50n \le 50n≤50且席位数显然不会过大样例中HHH为303030和555实际数据应保证算法可行。总时间复杂度对每组数据每个HHHO((H−n)log⁡nnlog⁡n)O((H-n) \log n n \log n)O((H−n)lognnlogn)在合理范围内。空间复杂度O(n)O(n)O(n)。代码实现// Constitutional Computing// UVa ID: 364// Verdict: Accepted// Submission Date: 2026-06-24// UVa Run Time: 0.000s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;structState{string name;longlongpop;};// Hamilton 方法最大余数法vectorinthamilton(constvectorStatestates,intH){intn(int)states.size();longlongtotal0;for(autos:states)totals.pop;vectorintreps(n);intsum0;vectorlonglongrem(n);for(inti0;in;i){longlongprodstates[i].pop*H;longlongqprod/total;// 整数部分rem[i]prod%total;// 余数小数部分的分母固定为 totalreps[i](int)q;if(reps[i]1)reps[i]1;sumreps[i];}intleftH-sum;vectorintidx;for(inti0;in;i)if(states[i].pop*Htotal)idx.push_back(i);// 真实配额 1sort(idx.begin(),idx.end(),[](inta,intb){if(rem[a]!rem[b])returnrem[a]rem[b];returnab;});for(inti0;ilefti(int)idx.size();i)reps[idx[i]];returnreps;}// 通用除数法优先队列模拟vectorintdivisorMethod(constvectorStatestates,intH,functionlonglong(int)denom){intn(int)states.size();vectorintreps(n,1);if(Hn)returnreps;priority_queuepairlongdouble,intpq;for(inti0;in;i){longdoubleval(longdouble)states[i].pop/denom(reps[i]);pq.push({val,i});}intremainH-n;while(remain0){while(true){autocurpq.top();pq.pop();inticur.second;longdoublecurVal(longdouble)states[i].pop/denom(reps[i]);if(fabsl(cur.first-curVal)1e-12L){// 有效元素reps[i];longdoublenewVal(longdouble)states[i].pop/denom(reps[i]);pq.push({newVal,i});remain--;break;}// 否则丢弃过时的旧值}}returnreps;}// Jefferson分母 rep 1vectorintjefferson(constvectorStatestates,intH){returndivisorMethod(states,H,[](intrep){returnrep1;});}// Adams分母 repvectorintadams(constvectorStatestates,intH){returndivisorMethod(states,H,[](intrep){returnrep;});}// Webster分母 2 * rep 1vectorintwebster(constvectorStatestates,intH){returndivisorMethod(states,H,[](intrep){return2LL*rep1;});}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intdataset1;intn;while(cinnn!0){vectorStatestates(n);for(inti0;in;i)cinstates[i].namestates[i].pop;coutData set dataset:\n;intH;while(cinHH!0){vectorinthhamilton(states,H);vectorintjjefferson(states,H);vectorintaadams(states,H);vectorintwwebster(states,H);coutFor H representatives:\n;for(inti0;in;i){intvals[4]{h[i],j[i],a[i],w[i]};intmxvals[0],mnvals[0];for(intk1;k4;k){if(vals[k]mx)mxvals[k];if(vals[k]mn)mnvals[k];}vectorstringmethods;if(mx!mn){// 存在某个方法严格大于其他方法if(vals[0]mx)methods.push_back(Hamilton);if(vals[1]mx)methods.push_back(Jefferson);if(vals[2]mx)methods.push_back(Adams);if(vals[3]mx)methods.push_back(Webster);}coutstates[i].name is favored by ;if(methods.empty()){coutno method.\n;}else{for(size_t k0;kmethods.size();k){if(k0)cout and ;coutmethods[k];}cout.\n;}}cout\n;// 每个代表数后空一行}dataset;}return0;}总结本题虽然背景复杂但核心算法并不难关键在于理解四种分配方法的等价最高均值实现以及正确比较各方法结果。主要收获最高均值法的通用模拟用优先队列按不同分母动态分配席位避免了除法收敛问题。浮点数比较用fabsl和极小的容忍误差处理long double值的相等性避免因精度问题导致死循环。并列第一的处理注意“更多”意味着严格大于因此必须检查最大值与最小值是否相等若相等则无任何方法占优。输入输出细节注意每组数据中HHH以000结束且每个HHH后要输出空行。这种题目的实现技巧优先队列 函数对象也适用于其他类似的分配或调度问题。

相关新闻

Python 项目配置文件怎么选?ini、json、yaml、toml、py 全对比选型指南

Python 项目配置文件怎么选?ini、json、yaml、toml、py 全对比选型指南

前言 几乎所有 Python 程序都离不开配置:接口地址、数据库账号、超时时间、开关变量、业务参数……很多新手随手写一个全局字典硬编码在代码里,上线改参数就要重新发布,维护极其痛苦。 市面上主流 Python 配置方案有五种:.py 原生…

2026/7/19 17:23:36阅读更多 →
如何为node-jsonc-parser贡献代码:开源项目参与指南

如何为node-jsonc-parser贡献代码:开源项目参与指南

如何为node-jsonc-parser贡献代码:开源项目参与指南 【免费下载链接】node-jsonc-parser Scanner and parser for JSON with comments. 项目地址: https://gitcode.com/gh_mirrors/no/node-jsonc-parser 欢迎来到node-jsonc-parser开源项目贡献指南&#xff…

2026/7/19 17:23:36阅读更多 →
可见性剔除:遮挡、视锥与 Portal 的层级设计

可见性剔除:遮挡、视锥与 Portal 的层级设计

可见性剔除:遮挡、视锥与 Portal 的层级设计 一、看不见的,就不该画 实时渲染的其一是条铁律是"不可见的物体不渲染"。一个开放场景里可能有十万物件,但玩家同一时刻只能看到其中一小部分。把全部物件都送进管线,是带宽…

2026/7/19 17:23:36阅读更多 →
ngx_output_chain_get_buf

ngx_output_chain_get_buf

1 定义 ngx_output_chain_get_buf 函数 定义在 src/core/ngx_output_chain.cstatic ngx_int_t ngx_output_chain_get_buf(ngx_output_chain_ctx_t *ctx, off_t bsize) {size_t size;ngx_buf_t *b, *in;ngx_uint_t recycled;in ctx->in->buf;size ctx->buf…

2026/7/20 0:15:05阅读更多 →
互联网大厂常见Java面试题及答案汇总(2026持续更新)

互联网大厂常见Java面试题及答案汇总(2026持续更新)

金九银十即将来袭,又是一个跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,今天为大家准备了互联网面试必备的 1 到 5 年 Java 面试者都需要掌握的面试题,分别 JVM,并发编程,MySQL,Tomca…

2026/7/20 0:15:05阅读更多 →
python数据可视化技巧的100个练习 -- 31. 类别数据的点图

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

重要性★★★☆☆ 难度★★☆☆☆ 你是一家零售公司的数据分析师。你的经理要求你可视化最近产品发布的客户满意度评级分布。评级是分类的,范围从“非常不满意”到“非常满意”。创建一个点图以显示每个评级类别的频率。使用 Python 进行数据处理和可视化。在代码中生成输入…

2026/7/20 0:13:05阅读更多 →
智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

在2026世界人工智能大会(WAIC 2026)举办期间,千里科技董事长、阶跃星辰董事长印奇作为特邀嘉宾出席大会开幕式并在大会主论坛(上午场)发表主题演讲《当智能体进入物理世界》。在印奇看来,"智能体"…

2026/7/20 0:13:05阅读更多 →
商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

7月18日,在WAIC 2026商汤科技 “基座大模型架构创新与生态合作论坛”上,商汤科技联合创始人、大装置事业群总裁杨帆发表《智变共生——加速AI基础设施持续升级》主题演讲,系统呈现了商汤大装置国产AI基础设施“技术-生态-商业”闭环布局&…

2026/7/20 0:13:05阅读更多 →
2026郑州美发学校避坑指南:拆解5种教学方式,谁在“流水线”谁在“真传技”?

2026郑州美发学校避坑指南:拆解5种教学方式,谁在“流水线”谁在“真传技”?

2026年想在郑州学美发,很多零基础学员最先搜索的问题就是:郑州美发学校哪家好?这个问题没有一个只看学校名字就能得出的答案。因为不同学校的课程方向、学习周期、教学方式和适合人群并不一样。有的更适合零基础,有的偏向发型师进修,还有的只做某一项短期技术培训。对于完全没…

2026/7/20 0:11:05阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/20 0:50:54阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/20 0:50:54阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/20 0:50:54阅读更多 →
2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

7月18日智东西消息,在2026 WAIC期间,努比亚联合字节豆包打造的二代“豆包手机”努比亚NaviX Ultra首次亮相,相比一代有诸多升级。智能体手机理念中兴通讯终端事业部总裁、努比亚总裁倪飞表示,智能体手机要从人操作手机变为手机帮人…

2026/7/20 0:01:04阅读更多 →
努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra:外观与功能双升级在2026 WAIC期间,首次亮相的努比亚NaviX Ultra吸引了众多目光。它是努比亚联合字节豆包打造的二代“豆包手机”,与一代努比亚M153相比,外观设计变化较大。其机身背部搭载横向排布的大尺寸影像模…

2026/7/20 0:01:04阅读更多 →
C# 将逗号分割的字符串转换为long,并添加到List<long>

C# 将逗号分割的字符串转换为long,并添加到List<long>

目录 方法1:使用Split和Convert.ToInt64 方法2:使用LINQ的Select和ToList 方法3:使用TryParse进行异常安全转换(推荐) 如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天…

2026/7/20 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/19 22:50:49阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/19 14:50:26阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/19 18:50:36阅读更多 →