算法竞赛经典题目集
math / 数学
inclusion-exclusion / 容斥
个人认为莫比乌斯反演属于容斥内容,不再额外开标签
Integer Partition / 整数拆分
-
CCPC2021 Weihai - M. 810975
n场比赛,获胜m场,最多连胜k场 => 整数拆分+容斥 传送门
gcd and lcm / gcd lcm 问题
-
CCPC2021 Guangzhou - K. Magus Night
求n长度数组满足条件gcd≤p且lcm≥q且a_n≤m的总贡献(累乘) => 求gcd≤p且lcm≤q和gcd≥p 传送门
-
cf1575 - G. GCD Festival
求∑∑gcd(a_i,a_j)⋅gcd(i,j) => 欧拉反演,更换枚举顺序,枚举欧拉函数变元带来的贡献 传送门
-
P2257 - YY's gcd
求 gcd(x,y)==prime 对数(x≤N,y≤M) => 整除分块,莫比乌斯反演,更换枚举顺序,枚举T=p*k 传送门
-
17th HLJCPC - E. Exclusive Multiplication
\(f(n) = \prod_{i = 1}^m p_i^{a_i \% 2}\) 求 \(\left(\sum_{1\leq i < j \leq n} f\left(b_i \times b_j\right)\right)\mod (10^9+7)\) => b[i] = f(b[i]) 求 \(2Ans + n = \sum_{i=1}^n\sum_{j=1}^n\frac{b[i]\cdot b[j]}{\gcd^2(b[i],b[j])}\) 博客未写...
permutation / 全排列问题
-
cf1613 - F. Tree Coloring
给树的节点赋权值,要求为全排列且\(c_k = c_{p_k} - 1\),求方案数 => 容斥枚举破坏i个条件的方案数D&Cfft 传送门
-
ICPC2021 Shanghai - B. Strange Permutations
给定排列P,求\(Q_{i+1} \neq P_{Q_i}\)的Q排列方案数 => 找1->n路径,容斥枚举,启发式合并所有环的生成函数 传送门
计数问题
-
2022 Nowcoder multi-university training 2nd - E. Falfa with Substring
记 Fn,k 表示串长 n 且 "bit" 串恰好出现 k 次的本质不同字串个数, 求 Fn,0 ~ Fn,k
\(f_k = 26^{n-3k}\cdot C_{n-2k}^k - \sum_{i=k+1}^nC_i^k\cdot f_i\) 暴力展开右边的 f_i , 算出 \(k!f_k = \sum_{i=k}^n \frac{(-1)^{i-k}}{(i-k)!} \cdot (i!\cdot g_i)\)
减法卷积, reverse 一个多项式即可
期望问题
-
2022 HDU multi-university training 3rd - A. Equipment Upgrade
一把武器要升级到 n, 每次尝试升级要花费 ci, 有 Pi 的概率成功升级到 i+1 级, 失败会降级, 降 j 级的概率是 \(\left(1-p_i\right)\frac{w_j}{\sum_{k=1}^i w_k}\)
记 fi 表示从 0 升到 i 级的概率, 那么 fi+1 则为 fi 加 升级费用 加从 i-j 级升级回 i+1 级的期望(直接相减即可), 之后用分治FFT卷就行
Burnside
旋转同构
-
2022 HDU multi-university training 6th - K. Equipment Upgrade
对长度为 i 的数组, 每个元素可以为 [0,m-1], 可以对所有元素 +1, 或循环左移 1 位, 以上操作可做任意次, 求从 i 从 1 到 n 下, 本质不同数组数
对操作 1, 相当于差分后, 得到求和为 km 的 i 长度数组, 对操作 2, 循环移动等价于旋转同构染色问题
斯特林展开
-
cf1716 - F. Bags with Balls
对于 n 长度的数组, 每个元素可以选 [1,m] 中的任意一个值, 一个数组的贡献为该数组中奇数的个数的 k 次方( k≤2000 ), 求所有数组的贡献和
枚举有 i 个选奇数, 跑个组合数, \(i^k\) 可以斯特林展开
DP / 动态规划
计数DP
一维
-
cf1613 - D. MEX Sequences
\(n \leq 10^5,\ O(n)\)
求满足第i个数与前i个数的MEX绝对值差<=1的子序列个数 => 最后一个数选i往+2,+1,+0,-2去dp 博客未写...
树背包
-
ICPC2021 Shenyang - L. Perfect Matchings
$ 2*n \leq 4000,\ O(n^2) $
给一个完全图删去一颗树计算最大匹配方案数 -> 容斥+树背包 博客未写...
树形DP
-
17th HLJCPC - C. Tree Division
给一个树和点权,问是否恰好能将点分为两个子集,使得 A 集合点根据祖先孩子关系递增,而 B 递减 => 树 DP ,共 4 种情况(父A父B子A子B)
二维
-
2020-2021 Winter Petrozavodsk Camp - A. Adjacent Rooks
\(n \leq 5000,\ O(n^2)\)
给一个n*n阵,每行每列有且仅有1个棋子,问斜对角棋子对数恰好为k的方案数 -> 全排列,枚举每次新增一个数转移的多种情况 传送门
迪利克雷dp(因数倍数转移)
-
cf1614 - D2. Divan and Kostomuksha
$n\leq 10^5,m=max(a_i) \leq 2\cdot 10^7 \ $, \(O(m\ log\ log\ m)\)
重排列给定数组使得前i(1~n)个数gcd和的和最大 -> 枚举当前选i作gcd然后dp转移到自己的倍数 博客未写...
剩余背包
-
cf1670 - F. Jee, You See?
$n \leq 1000, l,r,z \leq 10^{18}\ $, \(O(n^2 \cdot log\ max(r,z))\)
data structure / 数据结构
哈希
-
2022 HBCPC - J. Palindrome Reversion
给一个串,是否能够在仅选取一个区间 [L,R] 翻转一次的情况下,使总串为回文串 -> 正向哈希 + 反向哈希
\(O(n)\)
后缀自动机
后缀自动机套线段树合并,倍增询问
-
cf666 - E. Forensic Examination
给出一个串S,再给m个串Ti,q次询问S[pl,pr]在T_[l,r]哪个串出现次数最多
\(O(n\ log^2\ n)\)
-
ICPC2016-2017 EC final - F. Mr. Panda and Fantastic Beasts
给出n个串,问第1个串在不出现在后面n-1个串且长度最小的串是什么(输出字典序最小的一个)
\(O(n)\)
-
2022 Nowcoder multi-university training 3rd - H. Hacker
给原串 n 长度串 S , 一个 m 长度的权值数组 v , k 个 m 长度的询问串, 要求每个询问串找一个与原串的公共子串, 使得子串所在段的权值和 ( 询问串和权值数组一一对应 ) 最大
用原串建立后缀自动机, 询问串到后缀自动机上跑, (失配了就往 fail 树跳, 直到该结点能往下匹配, 如果走到根还失配, 说明完全不匹配, 跳过 ) 同时子串长度, 更新为该节点的 len + 1
\(O(n + n log\ n)\)
树状数组
扫描线 + 树状数组维护二维偏序关系
-
2021 ICPC Colombia - K. Walking Tiles
线段树
动态开点线段树
-
cf1614 - E. Divan and a Cottage
维护最大k个数-1
-
AGM 2020, Final Round, Day 1 - F. Friendly Game
要注意k=0时的特判
主席树
-
cf1665 - E. MinimizOR
给定数组 a ,进行 q 次询问,每次询问 [l,r] 区间内任意两个数逻辑或的最大值
n 和 q 都是 1e5
-
Moscow Pre-Finals Workshop 2019. KAIST Contest - F. Fruit Tree
树上差分可持久化主席树维护路径信息
李超树
-
Moscow Pre-Finals Workshop 2019. KAIST Contest - H. Hard To Explain
树上可持久化李超树
bitset
dp优化
-
ICPC2021 shanghai - J. Two Binary Strings Problem
set
维护区间覆盖信息
-
ICPC2021 Taipei - F. What a Colorful Wall
绝对值
-
cf1633 - E. Spanning Tree Queries
map
维护区间信息
-
cf1638 - E. Colorful Operations
图论
图上 DP 计数问题
最短 / 最短+1 路径数
-
cf1650 - G. Counting Shortcuts
双向 BFS
可走环的路径问题
按位考虑
-
cf1659 - E. AND-MEX Walk
给一个带权无向连通图,q次询问u->v的所有路径中,使得MEX(w1,w1&w2,...,...&wn)最小的值