摘要:
最前面: AT的题都很有思维难度,总结一下一些AT的常规操作 1.对于有操作的题目,如果正面推不行的话考虑倒推,将操作转化,寻找更好的性质 2.模型转化,看到某一种的计算的式子,需要考虑有没有更简化的模型可以达到相同的效果 3.补集转化,正难则反 4.分析题目性质,计数题要找到一些限制条件或者构造方 阅读全文
摘要:
多项式 一.常用卷积形式 ·$a_{i}=\sum_{j=0}^{i} b_{i-j}c_{j}$ 直接FFT/NTT ·$a_{i}=\sum_{j=1}^{i} a_{i}b_{i-j}$ 分治FFT ·$a_{i}=\sum_{j=0}^{C} b_{i+j}c_{j}$ 其中$C$为一个定值 阅读全文
摘要:
NTT循环卷积 30分: 可以发现这是一个很明显的分层$DP$,设$dp[i][j]$表示当前走了j步走到i号节点的方案数。如果当前走的步数对节点有限制就直接将这个点的$DP$值赋成$0$ #include <bits/stdc++.h> #define mod 998244353 #define 阅读全文
摘要:
Day 1 NTT #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define m_k make_pair #define mod 998244353 #define int long long using namespace std; const 阅读全文
摘要:
斜率优化 首先,可以进行斜率优化的DP方程式一般式为$dp[i]=\max_{j=1}^{i-1}/\min_{j=1}^{i-1}\{a(i)*x(j)+b(i)*y(j)\}$ 其中$a(j)$和$b(j)$都是关于$j$的函数,在$O(1)$时间内可以计算得出 将方程式进行变形 $$dp[i] 阅读全文
摘要:
1.树上拓扑排序计数 结论$\dfrac{n!}{\prod\limits_{i=1}^n size_i}$ 对于节点$i$,其子树随意排序的结果是$size[i]!$ 但$i$需要排在第一位,只有$size[i]-1$个数可以任意排 乘上$\frac{1}{size[i]}$ 2.DAG上的问题退 阅读全文
摘要:
线段树 又是熟悉的感觉,又是E题写完了,没调完,不过还好上了紫 CF1295E 可以发现可以打败怪兽的关系类似二维偏序 那么首先考虑第一维(武器)以攻击值($a_{i}$)进行排序 把所有的怪兽以防御力($x_{i}$)进行排序 然后用双指针维护到目前遍历到的武器,可以打败的怪兽 然后考虑防具和怪兽 阅读全文
摘要:
点分治+李超树 因为题目要求的是树上所有路径,所以用点分治维护 因为在点分治的过程中相当于将树上经过当前$root$的一条路径分成了两段 那么先考虑如何计算两个数组合并后的答案 记数组$a$,$b$,求得是将$b$数组接到$a$数组的答案 其$a$,$b$的sum of prefix sums分别为 阅读全文
摘要:
容斥原理 解法一: 其他容斥原理的题也可以用这种思想 先把$A$,$B$,$C$分解因数 一种很暴力的想法是,将这些因数分成若干个集合(画出韦恩图),然后对有序数组的三个数分别枚举其位于哪一个集合中 然后可以将这些因数划分成$7$个集合 $1$ $1$ $1$ $C$ $B$ $A$ 此处为二进制下 阅读全文
摘要:
二分+最大流 首先考虑二分答案 然后可以发现对于已知时间,判断是否可以将所有机器人摧毁可以用网络流 建立源点和汇点,源点向每一个激光武器连一条容量为$time*b[i]$的边,表示该激光武器在$time$时间下最多能产生的伤害为$time*b[i]$ 每一个机器人向汇点连一条容量为$a[i]$的边, 阅读全文