Uol 2025 Wk2 题解
Recount 问题描述 最近的学校董事会选举竞争异常激烈:提案内容包括互换中小学的上学时间,一项备受争议的禁止在校穿着运动服的新着装规定,以及一项旨在提高房地产税以资助新橄榄球训练设施的提案,诸如此类的议题层出不穷。现在,距离投票站关闭已过去数小时,但获胜者仍未揭晓! 在绝望之中,选举官员们求助于您,请您编写一个程序来统计选票! 输入 输入包含一个单一的测试用例,即一张已投选票的列表。输入中的每一行都包含一位被投票的候选人的名字。一个名字可能由多个单词组成,以空格分隔。单词包含字母或连字符,但不含其他标点符号。列表中至少有2张选票。选票列表以包含字符 *** 的单行结束。这一行不应被计入票数。最多可以有100,000张有效选票。 输出 如果某位候选人获得了简单多数或绝对多数的选票(即,票数超过任何其他候选人),则输出这位候选人的名字!如果没有候选人获得简单多数,则输出:“ Runoff!”(别忘了包含感叹号!) 代码 #include <iostream> #include <string> #include <unordered_map> #include <algorithm> // using namespace std; // 为简洁起见,在单个文件中可以如此使用 namespace recount { int main(istream &cin, ostream &cout) { // 使用 unordered_map 存储每位候选人的票数。 // 键是候选人的名字(字符串),值是他们的票数(无符号长整型)。 std::unordered_map<std::string, unsigned long> m = std::unordered_map<std::string, unsigned long>(); std::string line; // 逐行读取选票,直到遇到哨兵值 "***"。 while(std::getline(cin, line)) { if(line == "***") { break; } // 为当前行所指的候选人增加票数。 // 如果候选人尚不存在于哈希表中,则会以计票数为1被添加进去。 m[line]++; } // 初始化一个字符串来存放获胜者的名字,以及一个变量用于存放最高票数。 std::string ans = "***"; // 使用哨兵值来检查是否存在平局。 unsigned long max_vote = 0; // 第一遍遍历:找出所有候选人中的最高票数。 for(const auto &[k, v]: m) { max_vote = std::max(max_vote, v); } // 第二遍遍历:找出获得最高票数的候选人。 for(const auto &[k, v]: m) { if(v == max_vote) { // 如果 'ans' 不再是哨兵值,意味着我们已经找到了一个获胜者。 // 此时再找到一个说明存在平局。 if(ans != "***") { cout << "Runoff!"; return 0; // 在打印平局结果后退出。 } // 这是找到的第一个获得最高票数的候选人。 ans = k; } } // 如果循环完成且 'ans' 只被更新过一次,则打印获胜者的名字。 cout << ans; return 0; } } 题解 这个问题要求我们处理一个投票列表,其中每一票都是一个代表候选人姓名的字符串。我们需要找出得票最多的候选人。如果只有一位候选人得票最高,我们就打印他/她的名字。如果有两位或更多的候选人并列获得最高票数,我们必须宣布“Runoff! ”。投票列表以一个特殊的字符串 *** 结尾。 ...
发现 debtap 中一个“删库跑路”级 Bug
一篇对 Arch Linux 工具 debtap 的 Bug 调查,揭示了一个看似无害的拼写错误修复,是如何意外触发了删除当前目录下所有文件的“rm -rf”致命缺陷。
解决 ThinkBook 16 G7+ ASP 在 Linux 系统下数字麦克风的顽固问题
记录了在联想 ThinkBook 16 G7+ ASP (AMD Ryzen AI 9) 笔记本上解决 Linux 系统下数字麦克风无声问题的详细过程,主要通过添加内核模块参数 options snd_sof_amd_common enable_pdm=1 实现
深入Anki卡片内部:反混淆技术与数据提取实践
深入解析复杂Anki卡片模板的反混淆技术,通过Puppeteer和JSDOM实现动态渲染内容的精准数据提取与迁移。
用Tampermonkey和AI为在线作业批改减负
记录了如何使用Tampermonkey脚本和百度文心AI为在线作业批改(特别是简答题)提供自动化辅助,以减轻教师重复性评分和评语工作的负担。
矩阵乘法性能测试:从三重循环到百 GFLOPS (AMD Ryzen AI + Radeon 平台实测)
深度对比11种矩阵乘法实现(从Naive到CPU SIMD、多核、BLAS及GPU加速如OpenCL/HIP/Vulkan)在AMD Ryzen AI + Radeon平台上的巨大性能差异与优化关键。
信号驱动的桥接演进:使用 Boost.Signals2 优化 C++ EnTT 与 Rust WASM 交互
重构 C++ EnTT 宿主与 Rust WASM 插件架构,将自定义事件替换为 Boost.Signals2,通过 Wasmtime 实现健壮、解耦的 FFI 通信与高级宿主-插件交互。
使用 EnTT 在 C++ Host 与 Rust WASM 插件间实现灵活的关系管理
使用 Wasmtime 和稳定 C FFI,在 C++ Host 中通过 EnTT 管理实体关系,并允许 Rust WebAssembly (WASM) 插件安全交互,利用数据驱动设计克服 WASM 边界限制。
深入探索 Wasmtime:C++ 与 Rust Wasm 模块的双向通信与内存共享
一篇详细的技术指南,介绍如何使用 Wasmtime 运行时在 C++ 宿主应用程序与 Rust WebAssembly 模块之间实现复杂的双向通信、共享内存访问和结构体传递。
在 EnTT 中优雅地处理实体关系:从 1:1 到 N:N
详细探讨了如何在 EnTT 中使用组件优雅地表示和管理 1:1、1:N 和 N:N 的实体关系,并通过代码示例展示了 CRUD 操作的实现。