P10855 【MX-X2-T4】「Cfz Round 4」Gcd with Xor
暑假的题到现在终于看得懂题解了,看了一遍莫反推的式子感觉比较困难,还是高维差分好懂。
也就是说我们对于每个 \(d\) 求出来有多少对 \((i,j)\) 满足 \(\gcd(j,j\oplus i)=d\) 就能求出答案,但是直接计数非常困难。
所以我们对于每个 \(d\) 求出有多少对 \((i,j)\) 满足 \(d\mid\gcd(j,j\oplus i)\) ,然后高维差分就能得到 \(\gcd(j,j\oplus i)=d\) 的数量。
求解 \(d\mid\gcd(j,j\oplus i)\) 的数对数量就容易了许多。
我们现在要求的是 \(\sum\limits_{d\mid j}^n\sum\limits_{i=j}^n[d\mid(j\oplus i)]\)。记 \(w(d,j,n)=\sum\limits_{d\mid j}^n\sum\limits_{i=0}^n[d\mid(j\oplus i)]\),那么我们要求的就是 \(\sum\limits_{d\mid j}^{n}w(d,j,n)-w(d,j,j-1)\)。
对于每个 \(d\) ,我们枚举 \(d\) 的倍数 \(j\),从高到低枚举上界 \(n\) 的二进制位,计算 \(j\) 恰在当前二进制位小于 \(n\),后面随意的答案。由于这个是完整的二进制区间,那么他异或上一个数,还是一个完整的二进制区间,那我们只需要求一下区间内 \(d\) 的倍数的个数,这个可以 \(O(1)\) 实现。
P11660 我终将成为你的倒影
\(b\) 很小,这是我们做题的关键,容易想到对每个 \(b\) 预处理一些东西。
对于 \(a\) 我们只关注 \(a\bmod b\) 的值,后面的 \(a\) 都是在 \(\bmod b\) 意义下来说的。
对于两个数 \(x\ge y\) 满足 \(\lfloor\frac{x+a}{b}\rfloor=\lfloor\frac{y+a}{b}\rfloor\),那么只有两种情况:
- \(\lfloor\frac{x}{b}\rfloor-\lfloor\frac{y}{b}\rfloor=1\),此时 \(a\) 要满足 \(b-y\bmod b\le a<b-x\bmod b\)。
- \(\lfloor\frac{x}{b}\rfloor-\lfloor\frac{y}{b}\rfloor=0\),此时 \(a\) 要满足 \(a<\min(b-x\bmod b,b-y\bmod b)\) 或者 \(a\ge\max(b-x\bmod b,b-y\bmod b)\)。
这个区间加一操作可以差分实现。
这个解决了之后就可以分块对每个块预处理出 \(c_{i,b,a}\) 代表第 \(i\) 个块在 \(b,a\) 时的答案,问题就解决了。
P4921 [MtOI2018] 情侣?给我烧了!
这题二项式反演的复杂度是 \(Tn^2\) 的,碰到这种情况可以尝试把二项式反演的式子化一下。
发现后面的式子只和 \(n-k\) 有关了,这样就可以 \(O(n^2)\) 预处理,\(O(Tn)\) 查询了。
但这样并不能通过加强版。
设 \(g_i\) 表示 \(i\) 对情侣均错开的方案数,那么我们的 \(ans_k=\binom n k\times A_n^{k}\times2^k\times g_k\)。
\(g_k\) 的求法可以类比错排:
- 若原来有 \(i-1\) 对情侣均错开,现在新增了一对情侣和一排座位,显然这对情侣的其中一个可以任意选择位置,另一个只需要保证不和上一个人坐一排并且不把上个人换走的人的情侣换到一排就行,总方案数 \(2i\times2(i-1)\)。
- 若原来有 \(i-2\) 对情侣均错开,有一对情侣坐在一排,那么方案数为