A.
由于答案是三次方级别的,所以不难想到枚举三位考虑这三位上的贡献。
这个东西可以用bitset简单优化,复杂度可以做到$nk^3/w$。
假如k非常大,那么考虑暴力枚举每个点对贡献。这个过程可以通过压位来实现,复杂度$n^2k/w$。
将这两个合在一起就有80分了。
发现第一部分的复杂度太高,考虑优化。
考虑当k非常小的时候,可以直接fwt求出来每种异或结果的方案数。考虑我们只需要其中的三位,那么可以将所有位分成若干组,枚举三组统计答案即可。
具体细节不是很会。
B.
首先不难将这个式子化成$sumlimits_{i=1}^{n}mu(i)sumlimits_{j=1}^n [gcd(i,j)==1] mu(j)$的形式。
然后题解的做法是设一个阈值B,那么对于$i in [1,B]$暴力统计答案。
对于剩余的部分,枚举点对造成贡献。
那么剩下的问题是求出来$f(x,y)=sumlimits_{i=1}^x [gcd(i,y)==1] mu(i)$。
假如$y=1$,那么直接杜教筛就可以计算。
其余的部分,可以考虑$f(x,y)=sumlimits_{d|y} f(x,d)$。
然后直接暴力递归就行了。然而还是会死。
这个形式好像很像杜教筛,所以我们可以预处理出来一部分的f,然后进行暴力递归就行了。
C.
对于排列,假如将$i$和$p_i$连边,那么最终将出现若干个环。假如我们已经知道了图的形态,那么只要给每个环定向就行了。
所以要求出来所有有用的边。
假如当前确定了一个集合的边,满足这个集合中的边互不相交,要求出来这个集合中的有用的边,直接分治就可以了。
那么现在的问题是,将所有边拆分成较少的集合数,满足每个集合中的边都互不相交。
这是个构造题,一种很帅的构造方法是对于第x轮,将$i+j equiv x pmod {n-1}$的所有$(i,j)$选入一个集合。$n-1$与没有匹配的那条边匹配
于是问题就解决了。