Record -「Tricks」记录

cirnovsky /
  • 曼哈顿距离 dist(A,B)=xAxB+yAyB\text{dist}(A,B)=|x_{A}-x_{B}|+|y_{A}-y_{B}| 可以拆成 max{xAxB+yAyB,xAxByA+yB,xA+xB+yAyB,xA+xByA+yB}\max\{x_{A}-x_{B}+y_{A}-y_{B},x_{A}-x_{B}-y_{A}+y_{B},-x_{A}+x_{B}+y_{A}-y_{B},-x_{A}+x_{B}-y_{A}+y_{B} \}agc 034d

  • 走步数什么的构造题步数限制大约在 log\log 级别可考虑二进制拆分(倍增构造)。arc 103b

  • xmodmx\bmod m 除了拆成 xxm×mx-\lfloor\frac{x}{m}\rfloor\times m 还可以拆成 xkm,(kZ)x-km,(k\in \mathbb{Z})arc 111b

  • 像什么 第 ii 个人对应第 pip_{i} 个物品,pp1,,n1,\cdots,n 的一个排列这种,直接连边。arc 111c / some abc d

  • 对应上一条,这种情况连边一定是一个这样 ipippiii\rightarrow p_{i}\rightarrow p_{p_{i}}\rightarrow\cdots\rightarrow i 的环。arc 111c

  • 一个平面上有一堆点 (x1,m),(x2,m),,(xn,m)(x_{1},m),(x_{2},m),\cdots,(x_{n},m)xix_{i} 单调递增),找一点 (n,m)(n,m) 使得 dist((xi,m),(n,m))\sum\text{dist}((x_{i},m),(n,m)) 最小,则 nn 的取值范围是 [an+12,an+22][a_{\lfloor\frac{n+1}{2}\rfloor},a_{\lfloor\frac{n+2}{2}\rfloor}]cf 1486b

  • 字符串本质不同子串数:i=1nnsaihti+1=i=1nihti\sum_{i=1}^{n}n-sa_{i}-ht_{i}+1=\sum_{i=1}^ni-ht_i / i=0n1nsaihti=i+1hti\sum_{i=0}^{n-1}n-sa_i-ht_i=i+1-ht_ibzoj 4310

  • 把字符串反转后插入 SAM 后,两个原串的后缀在 parent tree 上的 LCA 是这两个后缀的 LCP。bzoj 3879

  • 对于树上/图上/序列上数某些个点中满足一些条件的点的个数(像 LCA、重心 之类的),考虑一个点能作为满足条件的点几次。plural

  • 我们记一个结点 uu 的重儿子为 hbuhb_{u},对于 subtree(u)\text{subtree}(u),如果 uu 不是 subtree(u)\text{subtree}(u) 的 centroid,那么 subtree(u)\text{subtree}(u) 的 centroid 一定在 subtree(hb(u))\text{subtree}(hb(u)) 里。csp 2019 centroid

  • 根据上一条,我们可以直接倍增找重心(注意只能从根开始找)。csp 2019 centroid

  • 值域比较小的关于值域的一些不等或等量关系的题可以考虑把值域放到指数构造生成函数。hk 2016 a+b problem

  • i×j=(i+j2)(i2)(j2)i\times j=\binom{i+j}{2}-\binom{i}{2}-\binom{j}{2}loc 28870

  • 答案和阶乘相关的,并且模数长得很怪,比如 998857459=461×773×2803998857459=461\times773\times2803 这种,当 i2803i\ge2803 时,i!mod998857459=0i!\bmod998857459=0loc 28853

  • BST 相关,序列有序,[l,r][l,r] 对应 BST 上一棵子树,且其父结点一定是 l1l-1r+1r+1,具体是哪个要看大小讨论。cf 1025d

  • 序列分段可以先考虑平方 DP 再优化。csp 2019 partition / ctsc 2012

  • 有多个关键字的 DS 题可以考虑离线按一个关键字排序。lg p3247

  • 找递推关系可以考虑差分。lg p6156

  • lowydfnxlow_{y}\leqslant dfn_{x} 意味着 x,yx,y 在一个环。plural

  • a&b+ab=aba\&b+a\oplus b=a|ba&b+ab=a+ba\&b+a|b=a+ba+b=ab+2(a&b)a+b=a\oplus b+2(a\&b)cf 1451e1

  • fib(n+m)=fib(n+1)fib(m)+fib(n)fib(m1)fib(n+m)=fib(n+1)fib(m)+fib(n)fib(m-1)cf 446c

  • 棋盘向 下 / 右 走,很有些性质和 n+mn+m 有关,且移动一次 i+ji+j 加一,不会存在移动一次 i+ji+j 还是 i+ji+j。同时在一条从右上往左下的对角线上的点 i+ji+j 相同。arc 120b

  • 操作类似于令 a(i)a(i)1,a(i+1)a(i+1)+1a(i)\leftarrow a(i)-1,a(i+1)\leftarrow a(i+1)+1 然后交换 a(i),a(i+1)a(i),a(i+1) 的,本质是保证下标,令 A(i)=a(i)+iA(i)=a(i)+i 可以使问题简化。arc 120c

  • nn 个元素中连边如果行不通不妨考虑每个元素内部连边。sgu 101 / abc 209e

  • 有多个元素分别对答案贡献时,如果单个元素的贡献很好算,不妨考虑每个元素的贡献次数。many e.g. abc 209f

  • 出现 amodp=bmodpa\mod p=b\mod p 时,等价于 ab0(modp)a-b\equiv0\pmod p,对应到 aiai+1aj(modp)a_i\equiv a_{i+1}\equiv\dots\equiv a_j\pmod p,就考虑差分。cf 1548b (cf 1549d)

  • 出现形似 a×ba\times b 为完全平方数的限制时,考虑消除平方因子,弱化成 a=ba=bcf 840c

  • gcd(a,b)=gcd(a+kb,b)\gcd(a,b)=\gcd(a+kb,b)unknown

  • ij[(i,j)=x]=φ(Nx)×21\sum_i\sum_j[(i,j)=x]=\varphi(\lfloor\frac{N}{x}\rfloor)\times2-1

  • (a,b)=1(a,b)=1(aibi,ajbj)=a(i,j)b(i,j)(a^i-b^i,a^j-b^j)=a^{(i,j)}-b^{(i,j)}

  • 如果一个函数 f(x)f(x)kk 阶差分是一个非零常数那么 f(x)f(x) 一定是一个 kk 次多项式。

  • 若题目为序列的变化,考虑构造终止情况。

  • dp 刷表看看转移范围是否连续,可以看是否能整体 dp 维护。

  • 同一个图的 MST 每种权值的边的数量是一定的。cf 891c

  • 区间操作考虑差分(指题目中对各种序列的操作,不是那种数据结构题)。cf 1120d

  • 数列全为零等价于差分序列全为零。cf 1634f

  • 判定一个点是否在多边形内可由这个点以任意斜率拉出一条射线,看交点奇偶性。cf 375c

  • 数的出现次数的 mex 可以暴力求。cf 940f

  • 排列题可以放在逆排列里考虑,重新描述问题。wc 2022 rrads

  • 上上一条,不同出现次数的级别是根号,很多时候都可以考虑暴力。cf 1476g

  • 出现概率的和式考虑事件是否独立构造组合意义。cf 1523e

  • 和式 = 某个数,考虑看成某个数个 1 然后分配(精度思维)。hdu 7060

  • XOR 的性质:min(xy,yz)<xz\min(x \oplus y, y \oplus z) < x \oplus z

  • DP 可以考虑交换值域和下标。