ZU_Constructive Algorithms
发表于|更新于
|浏览量:
构造算法
- 这个文章主要针对cf div2 cd题难度的做题感想
题目类型
- 去看题目要求的输出:
- 如果要求你输出构造的具体条目
- 有输出要求(字典序之类的):那这个构造一定有一个或者一群比较优的算法,在这些算法里面一定能按某种贪心来找到正确的构造
- 没有输出要求:一般贪心之类的
- 如果要求你输出最大/最小和…一般不需要直接构造答案。
- 此时关注数据范围,如果要求你多次输出(或者求最优,可能需要每一种构造方案都比较一下)大概率是O1或者Ologn算法
- O1常用前缀和/后缀和/推理数学性质构造式子
- 如果要求你输出构造的具体条目
文章作者: KeronsHans
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZuesHans's little bag!
相关推荐

2025-11-11
KH单调栈单调队列
单调栈模板 运用场景 下一个/上一个更大/更小值的位置 去除重复子串 精妙之处 在栈里面存下标,只在更新的时候“取下标”。 AC代码 123456789101112131415161718192021222324int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } stack<int> stk; vector<int> ans(n); for (int i = 0; i < n; i++) { while (!stk.empty() && a[stk.top()] < a[i]) { ans[stk.top()] = i + 1; stk.pop(); } stk.push(i); &...

2025-11-13
KH二进制
二进制常见trick 快速判断奇偶:n & 1 乘除2n >> 1 n << 1 x>>k是指x右移k格就是把最右边顶掉就是除以二 正数是向下取整负数是向下(比如-5>>1=-3) 关于2的次方:必须注意的两个“坑”坑一:优先级问题位运算的优先级低于加减法!错误:1 << k - 1 (会被解析为 1 << (k - 1))错误:a + 1 << k (会被解析为 (a + 1) << k)正确:总是加括号!(1 << k)坑二:不要用 pow(2, k)pow() 函数是浮点运算,返回值是 double。缺点:慢:比位运算慢得多。精度问题:当 kkk 很大时,转回 int 或 long long 可能会出现精度丢失(比如算出 31.99999 转成 31)。结论:整数运算永远只用 <<。 是不是2的整数次幂 作用:log2 n; n & (n - 1) lowbit:用于树状数组update 和 query 操作b...

2025-11-06
KH图论
Dijkstra最短路算法 Dijkstra模板 P4779 【模板】单源最短路径(标准版) 题号: P4799 链接: 题目链接 算法类型:最短路 AC 代码: 123456789101112131415161718192021222324252627282930313233343536373839void solve(){ ll n,m,s; cin>>n>>m>>s; //前面是点,后面是距离 vector<vector<pair<int,ll>>> mp(n+1); rep(i,0,m-1) { int u,v,w; cin>>u>>v>>w; mp[u].push_back({v,w}); // mp[v].push_back({u,w});这道题是有向边所以不要入两次!! } pri...

2025-11-10
KH数据结构入门与stl
unique O(N) 去重 (只去相邻重复) 离散化 (Sort + Unique + Erase) 必须先 Sort! m = unique(a, a+n) - a; 返回去重后末尾指针。 next_permutation O(N) 下一个全排列 暴力枚举全排列 生成字典序 do { ... } while(next_permutation(all(s))); lower_boundO(logN) 找 ≥\ge≥ val 的第一个位置 LIS (最长上升子序列) 查找排名/前驱后继返回迭代器。 idx = lower_bound(all(v), val) - v.begin(); __gcd O(logV) 最大公约数 数论、化简分数 lcm(a,b) = a/gcd(a,b)*b fill O(N) 赋值 初始化数组/容器 fill(a, a+n, val);比 memset 安全,支持任意值 (memset 只能 0/-1/0x3f)。 vector 我的最爱 支持可变大小,不支持开出来的大小清空 O(1) p...

2025-11-13
KH计算几何
这里是计算几何 使用建议 精度:定义dcmp来判断所有double 向量化 调试:cout << fixed << setprecision(10); 前置头 123456789const double EPS = 1e-9;const double PI = acos(-1.0);inline int dcmp(double x) { if (x < -EPS) return -1; if (x > EPS) return 1; return 0;}//这个函数可以做到:1,提取数字的符号 2,比较两个数的大小:调用的时候:dcmp(a-b)inline double sqr(double x) { return x * x; }//取平方 struct 点(包含重载运算符) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950struc...

2026-01-01
ZU_基础算法
交互模板 C++ 代码: 1234567891011121314151617181920#include <cstdio>#include <iostream>int main() { for (int l = 1, r = 1000000000, mid = (l + r) >> 1, res; l <= r; mid = (l + r) >> 1) { std::cout << mid << std::endl; std::cin >> res; if (res == 0) { return 0; } else if (res == -1) { l = mid + 1; } else if (res == 1) { r = mid - 1; } else { puts("OvO, I AK IOI"...



