Skip to content

Instantly share code, notes, and snippets.

View znzryb's full-sized avatar

Zhong Zhuoyuan znzryb

View GitHub Profile
@znzryb
znzryb / test_namespace_DBG.cpp
Last active April 15, 2026 12:38
算法竞赛 debug 命名空间测试
// teamname: Gospel_rock
/**
* Problem: ${PROBLEM_NAME}
* Contest: ${PROBLEM_GROUP_NAME}
* Judge: ${ONLINE_JUDGE_NAME}
* URL: ${PROBLEM_URL}
* Created: 2026-04-15 18:55:49
* Author: Gospel_rock
* My blog: https://znzryb.com/
*
@znzryb
znzryb / debug_template.hpp
Last active April 15, 2026 10:30
Compact competitive programming debug template (template<T> style)
#ifdef LOCAL
template<typename T> void _dbg_print(T x) { cerr << x; }
void _dbg_print(bool x) { cerr << (x ? "T" : "F"); }
void _dbg_print(string x) { cerr << '"' << x << '"'; }
template<typename T> void _dbg_print(vector<T> v) { int n = v.size(); cerr << "["; for (int i = 0; i < n; i++) { if (i) cerr << ", "; _dbg_print(v[i]); } cerr << "]"; }
template<typename T> void _dbg_print(set<T> s) { cerr << "{"; int f = 0; for (auto x : s) { if (f++) cerr << ", "; _dbg_print(x); } cerr << "}"; }
template<typename T, typename U> void _dbg_print(pair<T, U> p) { cerr << "("; _dbg_print(p.first); cerr << ", "; _dbg_print(p.second); cerr << ")"; }
template<typename T, typename U> void _dbg_print(map<T, U> m) { cerr << "{"; int f = 0; for (auto& [k, v] : m) { if (f++) cerr << ", "; _dbg_print(k); cerr << ": "; _dbg_print(v); } cerr << "}"; }
void _dbg() { cerr << endl; }
template<typename T, typename... A> void _dbg(T x, A... a) { _dbg_print(x); if (sizeof...(a)) cerr << ", "; _dbg(a...); }

完全理解线性筛

线性筛的作用就是为了保证每个合数都只被其【最小的】那个质因数标记一次。

这下面👇讲的比较一般啊。 线性筛只有可能标记一个数字一次。

这个讲的有点复杂了,最后是关键,就是每个数只会以唯一方式被标记。

@znzryb
znzryb / optional_explained.md
Created April 15, 2026 05:04
讲解 C++ std::optional 的用途——以竞赛中延迟构造数据结构为例

C++ std::optional 讲解——以竞赛中延迟构造数据结构为例

什么是 std::optional

std::optional<T>(C++17)是一个可能持有也可能不持有 T 类型值的容器。你可以把它理解为一个"安全的、可选的盒子":

  • 盒子里有值:可以用 *optopt->member 访问。
  • 盒子里没有值:默认构造时就是空的(std::nullopt)。
@znzryb
znzryb / gist:4ea5128fe22a19e3bfc75af246b61756
Created April 14, 2026 18:05
速度测试——ST 表存下标,合并时引用外部数组 w 做 argmax
/*
"/Users/zzy/Desktop/DoProblemAsMyTaste/HDU/2026 杭电春季联赛 4/cmake-build-release/st_func_bench"
场景:ST 表存下标,合并时引用外部数组 w 做 argmax
N = 1000000, Q = 5000000
Build(ms) Query(ms)
A: std::function (lambda&) 53.46 40.59
B: custom functor (ref w) 43.16 20.65
C: raw hardcoded 40.90 20.37