邪修卡常:动态bitset 由于 std::bitset 仅支持编译期固定大小无法动态确定长度这使得某些 ∑≤ 的多测题中使用 std::bitset 超时。于是我让 AI 生成了一份比赛中可用的动态bitset模版并且测试了其在部分板题里的性能。实现cpp#include iostream #include vector #include cstdint using namespace std; using u64 uint64_t; struct dynamic_bitset { int n; std::vectoru64 b; dynamic_bitset(int _n 0) : n(_n), b((_n 63) 6, 0) {} void resize(int new_n) { if (new_n n) return; b.resize((new_n 63) 6, 0); // 新块自动置零 n new_n; clean_tail(); } // 读取某一位只读不抛异常 bool operator[](int pos) const { return (b[pos 6] (pos 63)) 1; } // 设置某一位 void set(int pos, bool val true) { if (val) b[pos 6] | 1ULL (pos 63); else b[pos 6] ~(1ULL (pos 63)); } // 置零某一位 void reset(int pos) { b[pos 6] ~(1ULL (pos 63)); } // 翻转某一位 void flip(int pos) { b[pos 6] ^ 1ULL (pos 63); } // 位运算 dynamic_bitset operator(const dynamic_bitset rhs) { for (size_t i 0; i b.size(); i) b[i] rhs.b[i]; return *this; } dynamic_bitset operator|(const dynamic_bitset rhs) { for (size_t i 0; i b.size(); i) b[i] | rhs.b[i]; return *this; } dynamic_bitset operator^(const dynamic_bitset rhs) { for (size_t i 0; i b.size(); i) b[i] ^ rhs.b[i]; return *this; } dynamic_bitset operator~() const { dynamic_bitset res *this; for (auto x : res.b) x ~x; res.clean_tail(); return res; } // 1 的个数 int count() const { int ans 0; for (auto x : b) ans __builtin_popcountll(x); return ans; } // 清除尾部多余位 void clean_tail() { if (n 0) return; int rem n 63; if (rem) b.back() (1ULL rem) - 1; } }; // 非成员二元运算符方便书写 inline dynamic_bitset operator(dynamic_bitset a, const dynamic_bitset b) { return a b; } inline dynamic_bitset operator|(dynamic_bitset a, const dynamic_bitset b) { return a | b; } inline dynamic_bitset operator^(dynamic_bitset a, const dynamic_bitset b) { return a ^ b; }使用范例cppint main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); dynamic_bitset a(10),b; b.resize(10); a.set(1), a.set(2); b.flip(0); dynamic_bitset c(a|b); cout c.count() endl; return 0; }与 std::bitset 的区别不支持左移/右移[]只读无法通过 bit[0] 1 来置位。置位只能使用 set 和 reset 函数不支持 any、all 等函数这些也没什么必要输出不与 cout 兼容只能逐位遍历不支持转化整数和字符串与 std::bitset 的性能对比【模板】传递闭包std::bitset动态bitset[PA 2025] 集合 1 / Zbiory 1std::bitset动态bitset可以看到与 std::bitset 的性能差距还是比较明显。但是作为一种走投无路下的卡常手段动态bitset已经足够了。如果再追求优化可以考虑上 SIMD 指令集由于比赛中不确定是否能够使用这里不太推荐。

相关新闻

最新新闻

其他的 Agent 设计范式与 Agent 和 Workflow的区别

其他的 Agent 设计范式与 Agent 和 Workflow的区别

摘要:在大型语言模型(LLM)的应用落地浪潮中,“Agent(智能体)”与“Workflow(工作流)”已成为被频繁提及却也最容易混淆的两个核心概念。究竟什么是真正的 Agent?它与传统…

2026/8/28 11:19:58
具身智能规模化落地:从VLA模型到树莓派小车的最小系统实践

具身智能规模化落地:从VLA模型到树莓派小车的最小系统实践

具身智能喊了好几年,从实验室里的机械臂抓取,到工厂里的质检分拣,再到家庭服务机器人,大家都在等一个“真正能规模落地”的拐点。但拐点不是靠换一台更贵的机械臂、加更多传感器就能出现的,真正的变量在机器人“大脑”…

2026/8/28 11:19:58
Python学生信息管理系统:从基础菜单到工业级设计的实战指南

Python学生信息管理系统:从基础菜单到工业级设计的实战指南

1. 项目概述与核心价值 最近在整理教学资料时,翻出了几年前带学生做的一个经典练手项目——用Python实现一个学生信息管理系统。这个项目几乎是每个Python初学者在掌握了基础语法和数据结构后,第一个有完整交互逻辑的实战案例。而整个系统的“门面”和“…

2026/8/28 11:19:58
RVV Benchmark实战:从环境到选型的关键解读

RVV Benchmark实战:从环境到选型的关键解读

RVV benchmark 最近讨论度明显上来了,尤其是 SiFive P870、Lanxin LX500、Epic Semi Contrail AIx 这三类 RISC-V 处理器被放在一起对比的时候。它们都支持 RISC-V 向量扩展 RVV,但定位差得很远:有的是通用高性能 IP,有的是面向 A…

2026/8/28 11:19:58
动态规划建模实战:从核心思想到代码实现与避坑指南

动态规划建模实战:从核心思想到代码实现与避坑指南

1. 从“走迷宫”到“最优路径”:动态规划的核心思想 最近在带学生做数学建模竞赛,发现很多同学一遇到多阶段决策问题,比如资源分配、生产计划、最短路径优化,第一反应就是上启发式算法或者机器学习。这当然没错,但往往…

2026/8/28 11:19:58
让搜索替你找上门:Tech Interview Handbook 面试准备内容 SEO 落地 7 步拆解

让搜索替你找上门:Tech Interview Handbook 面试准备内容 SEO 落地 7 步拆解

让搜索替你找上门:Tech Interview Handbook 面试准备内容 SEO 落地 7 步拆解 【免费下载链接】tech-interview-handbook Curated coding interview preparation materials for busy software engineers 项目地址: https://gitcode.com/GitHub_Trending/te/tech-in…

2026/8/28 11:14:58