Loading

经验之谈

交换序列中\(x,y\), 逆序对奇偶性变换

交换 \(x,y\)
首先 $ k \leq x$ 部分的逆序对不变,\(k \geq y\) 部分不变
唯有 \(x \leq k \leq y\) 会变化
那么怎么变呢?
如图:
img
原来逆序对 \(a + c\) ,现在逆序对: \(a + b + b + c + 1 = a + 2b + c + 1\)

那么我们换完会奇偶性会变化一次

如果题目中有...

构造一个操作序列,使 \(a\) 的所有元素在最多 \(40\) 次操作中等于 \(0\),或者确定这是不可能的。
这样的话,说明可能可以考虑 \(log\) 的方法(常为二分)

数据也是过题的关键,如果可以,尽量去猜一个合理的复杂度,然后找合适的算法去匹配

随机化

  1. 对于一个 \([1 \sim n]\),随机问 \(k\) 个数,取最大值 \(m\)\(m\) 接近 \(\frac{k}{k + 1}n\)
    (证明见另一个随笔“问一问神奇的ChatGPT”)

树的直径

img

在一个树的两个点集中,分别由直径 \((x,y),(u,v)\)

那么,这个两个点集的并的直径为 \(\max\{(x,y),(u,v),(x,v),(y,u),(x,v),(y,v)\}\)

树的链

树的链交一定是一条链

#define int long long 的风险

  1. 小心爆内存!

  2. this Discuss,Thx!
    img

  3. 别忘 \(int\ main() \rightarrow signed\ main()\)

XOR与Plus

我们可以把 \(\operatorname{XOR}\) 看做二进制下的不进位加法

首先,\(\sum_{i = 1}^n a_i \geq \oplus_{i = 1}^n a_i\)

有等式:

\[(\oplus_{i = 1}^n a_i) + 2(\And_{i = 1}^n a_i) = \sum_{i = 1}^n a_i \]

\(2\And_{i = 1}^n a_i\))相当于手动进位

然后变形:

\[\sum_{i = 1}^n a_i - \oplus_{i = 1}^n a_i = 2(\And_{i = 1}^n a_i) \]

可见

\[\sum_{i = 1}^n a_i - \oplus_{i = 1}^n a_i \equiv 0 (\operatorname{mod}\ 2) \]

也就是

\[\sum_{i = 1}^n a_i \equiv \oplus_{i = 1}^n a_i (\operatorname{mod}\ 2) \]

这两者奇偶性相同!

状压枚举子集复杂度

(OI-wiki上的证明)[https://oiwiki.org/math/binary-set/#遍历所有掩码的子掩码]

时间复杂度是 \(\mathcal{O}(n^3)\)
代码:

for(int i = 1;i< 1<<n ;i++) 
    for(int j = i&(i - 1);j;j = i & (j - 1))
        if(......) 
            f[i] = m..(f[i],f[j] + w[i ^ j]);

多测

记得清空 + (一般是)换行

本人在 VP 2022NOIPT1 时,第一题未清空、换行、c \(\times\) C 、 f \(\times\) F 喜提 \(0\)

关于有限状态搜索

当被称为有效的局面形成条件非常苛刻时,可以用比较偷鸡的方法(如搜索到一定次数后直接判断无解)

例如:P7205 [COCI2019-2020#3] Drvca

STL容器

如果 BFS,Dij,spfa 被卡常了,注意循环的时候判断队列是否为空之类的不要用 ().size() 图省事,老老实实用 ().empty()

这两者时间差异很大。

posted @ 2024-07-30 16:25  MingJunYi  阅读(12)  评论(0编辑  收藏  举报