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"...
KH_实现合集
实现二进制拼凑某个数字 用代码表达就是从高位到低位扫描: 123456ll R = 0;for(int d = 29; d >= 0; d--){ if(n & (1ll << d)){ // 如果第d位是1 R = R * ten[d] + rli[d]; }}
sp_奇思妙想小题目
这里记录着我对题目的奇思妙想。因为我找不到oj,但是我又觉得这种题目很典,所以就搞了一个专门记录的帖子。不保证代码和分析全队,正确性由gemini3 pro支持… 1 题目描述 给出长度为n的数组ai(均为正整数),给出m,选择子序列使得子序列里面的乘积==n 解法解答:使用拆因子dp做法->在已经有的因子里面选择(这里一个实现难点是不能重复,而愚蠢的zues一开始没实现这个),跑背包dp 跑过随机数据代码: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455void solve(){ int n; cin >> n; int m; cin >> m; // m = 67; map<int, int> mp; for (int i = 0; i < n; i++) { int d; ...
KH_期望DP与概率论
对于期望 DP,我们一般采用逆序来定义状态,即考虑从当前状态到达终点的期望代价。 根据期望的线性性质计算出数学期望表达式 注意点 E[X^2] \neq (E[X])^2$$ -> 正确的代入姿势:展开全平方公式 收集邮票 核心模型:期望dp 思维误区 (Bug):展开完全平方式,x->f(x) x^2->g(x)注意一一映射关系 理解递推公式: 当前状态的期望 = ∑[转移到下一个状态的概率×(下一个状态的期望+本次转移的代价)]\sum [ \text{转移到下一个状态的概率} \times (\text{下一个状态的期望} + \text{本次转移的代价}) ]∑[转移到下一个状态的概率×(下一个状态的期望+本次转移的代价)] 一维初始方程:$$E(i) = P \cdot (E(i+1) + 1) + (1-P) \cdot (E(i) + 1)$$ g(x)=P⋅(g(x+1)+2f(x+1)+1)⏟抽到新票的贡献+(1−P)⋅(g(x)+2f(x)+1)⏟抽到旧票的贡献g(x) = P \cdot \underbrace{(...
sp_Valentine's Day
12345678910111213141516171819202122232425262728293031323334void solve(){ int n; cin >> n; map<int, int> love; for (int i = 0; i < n; i++) { int d; cin >> d; love[d]++; } for (auto hsh : love) { auto [ilove, ljl] = hsh; if (ljl % 2) { cout << "NO" << '\n'; return; } } cout << "YES" << &...
KH_对拍写法
python 的随机数生成器写法 基础常见语法 import random随机库 random.randint(a, b): 生成一个 [a,b][a, b][a,b] 范围内的整数(包含 aaa 和 bbb)。 random.choice(seq): 从列表或字符串中随机选择一个元素。 random.uniform(a, b): 生成一个 [a,b][a, b][a,b] 范围内的浮点数。 示例代码 1234567891011121314import randomdef solve(): n = random.randint(1,1000000) print(n) for i in range (n): c=random.randint(1,10) w=random.randint(1,10) print(c,w)# end=" " 表示打印后不换行,而是加个空格 print()# 最后换个行if __name__ == "__main__": ...
wp_spţ牛客寒假营典题
补题所得,按照知识板块分,可能加上其他地方找到的题 代码实现 [乘法逆元] (https://oi-wiki.org/math/number-theory/inverse/) 快速幂法求逆元 12345678910111213inline ll qpow(ll a, ll b, ll mod = MOD) { ll res = 1; while (b) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res;}ll inv(ll a, ll mod) { return qpow(a, mod - 2, mod);} 乘法原理(独立事件同时发生) 加法原理(互斥事件) A+B problem 核心模型: 题目给出一群概率如何打表?如何转化题目条件 题目条件转化 这道题我认为最难的是读懂同时满足的三条条件 最终所有...
wp_优化
基于数据范围打表预处理 筛法枚举 F. Easy Demon Problem 核心模型:调和级数枚举预处理 思维误区 (Bug):首先是对于题目负因数case没写上。其次是复杂度。这道题错解是n√nlogn,注意到数据范围会变成1e8,加上map常数大会tle。第一步优化换了unorded_set (O(1)查询最坏on)题目卡哈希冲突。 修正逻辑 (Patch):看到多次查询&&因子||倍数||最大公约数,在数据范围允许的条件下可以对值域内所有数有的性质进行打表。 关键逻辑:双重循环,但是内层循环是按倍数增长,这一块的复杂度实际上是nlogn的 关键代码: 1 Codeforces 1154G - Minimum Possible LCM 核心模型:枚举gcd 思维误区 (Bug):记录第一直觉为什么错了 (如: 以为是DP其实是贪心 / 读错题) 修正逻辑 (Patch):下次看到什么特征,要修正为正确思路 关键代码: 1// 只贴最核心的 3-5 行逻辑或 Check 函数,不要贴 main 时空复杂度优化 BFS E. Produc...
ZU_Constructive Algorithms
构造算法 这个文章主要针对cf div2 cd题难度的做题感想 题目类型 去看题目要求的输出: 如果要求你输出构造的具体条目 有输出要求(字典序之类的):那这个构造一定有一个或者一群比较优的算法,在这些算法里面一定能按某种贪心来找到正确的构造 没有输出要求:一般贪心之类的 如果要求你输出最大/最小和…一般不需要直接构造答案。 此时关注数据范围,如果要求你多次输出(或者求最优,可能需要每一种构造方案都比较一下)大概率是O1或者Ologn算法 O1常用前缀和/后缀和/推理数学性质构造式子 排列数的组合是阶乘级别的
三国杀自制武将
谋·王基
wp_题目多解
P7913 [CSP-S 2021] 廊桥分配 通用优化:前缀和优化输出答案 优先队列模拟 优先队列模拟飞机进入时贪心分配廊道 前缀和优化快速查询 离散化思想 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677struct tim{ int l, r;};void solve(){ int n, m1, m2; cin >> n >> m1 >> m2; vector<tim> gn(m1); vector<tim> gw(m2); rep(i, 0, m1 - 1) cin >> gn[i].l >> gn[i].r; rep(i, 0, m2 - 1) cin >>...
wp_数据结构
数据结构 并查集 家谱 核心模型:题目要求给出一个父亲的名字,以及他的儿子们。接下来进行若干次查询,查询一个人的祖宗 思维误区 (Bug):套用dsu模板,但是模板默认有启发式合并 修正逻辑 (Patch):这道题强制要求了父亲与儿子的关系,所以删掉启发式合并,把father放在前面son放在后面(模板默认后面的往前面合并) 关键代码: DSU(并查集)里的启发式合并 在并查集中,启发式合并通常被称为 “按秩合并” (Union by Rank) 或 “按大小合并” (Union by Size)。 它的目的是 防止树退化成链,从而保证查询速度。 没有启发式合并:如果每次都固定把 YYY 接在 XXX 下面,而在极端数据下(比如 1→2,2→3,…,N−1→N1 \to 2, 2 \to 3, \dots, N-1 \to N1→2,2→3,…,N−1→N),并查集会变成一条长长的“链表”。查找一次祖先需要 O(N)O(N)O(N) 的时间。 有启发式合并:我们维护每棵树的 size(节点数)或 rank(高度)。永远把更小(或更矮)的那棵树,接到更大(或更高)的那...








