小技巧
尺取法。
\(meet~in~middle\)
枚举子集:\(for(int~i=s;i;i=(i-1)\&s);\)
无向连通图个数=总数-不联通的图的个数(基准点计数)。
01串也可以黑白染色\(qwq\)
处理1~n的所有数的所有因子,枚举因子\(\times\)倍数是O(n logn)的。
\(V-E+F=1+C\)
枚举\(k\)子集的方法:
for(int S=(1<<k)-1,ls1,ls2;S<(1<<n);S=(((S&~ls2)/ls1)>>1)|ls2){
···
ls1=S&-S;
ls2=S+ls1;
}
求子集比较方便
查分表第0条对角线(第一列)等于
的序列的通项满足:
前缀和满足:
对于\(n^k\) 求前缀和通项公式:
解方程组可得系数。
构造一个每个点度数都确定的没有子环没有重边的无向图:找当前度数最大的优先连度数大的。正确性:贪心,无解的限制是所剩的点<度数最大的点的度数。
\(reverse~sort\)一段\(01\)序列,要求\(reverse\)元素的总和尽量小:每次间隔一组\(01\)进行交换(一段0或1看做一个),这样每次都吧两个相同的数字合并成一个,减半,所以复杂度\(nlogn\)
\(for~example:\)
\(xor\)具有可逆性,\(a\)进行一系列\(xor\)得到\(b\),\(b\)以相反的顺序进行\(xor\)也可以得到\(a\),在让\(a\)得到\(b\)的过程中,可以\(a\)和\(b\)一起动。CF472F
线性基判断相等:将两个线性基消主元消成2的次幂,再判断一一相等。
值为\(0/1\)的\(dp\)每阶段按\(0/1\)段\(dp\)(\(0/1\)交界处)。
对于一个图,建立一棵生成树,每条非树边赋一个值,所跨的树上的链都异或上这个权值,然后
“一个边集的权值异或为\(0\Leftrightarrow\)删掉这些边图被分割成两部分”(存在\(hash\)冲突)
点分治处理联通块问题,强制每次都经过分治中心。
。。。。
先对\(a\)取\(max\),后对\(b\)取\(min\):
$a>b\Leftrightarrow $ 区间赋值为 \(b\)。
$a<b\Leftrightarrow $ 分开处理,小于 \(a\) 的改为 \(a\) ,大于 \(b\) 的改为 \(b\) , \(a,b\) 之间不变。
反之同理。
\(O(1)\)快速乘:
原理:\(a~mod~p = a - \lfloor\frac a p\rfloor\times p\)只与差有关。
ans = ((x * y - (LL) ((LDB) x * y / m) * m) % m + m) % m;
解释:第一个\(a\)直接\(mod~2^{63}-1\),第二个用\(LDB\)暂存,除以\(m\)后在\(LL\)范围内再转成\(LL\)再乘\(m~mod~2^{63}-1\)两数相减即为答案。
求期望时,当每种概率的贡献是从一开始的连续的整数时,答案是贡献大于\(1\)的概率\(+\)贡献大于\(2\)的概率\(\cdots\cdots\)。
原理:贡献为\(i\)的被统计了\(i\)次。
对于卷积:
\(1.\)若\(n>k\):
把\(c,b\)右移,
由于\(a_{i>n} = 0\),
\(2.\)若\(n<k\):
由于\(a_{i>n}=0\)