CF691E Xor-sequences
[10月9日的茶](Problem - 691E - Codeforces)
计数问题,只有相邻元素有约束,k很大,考虑矩阵快速幂dp
因为只有相邻元素有约束,所以转移只用看某序列最后一个元素,设 \(f[i][j]\) 为长度为 \(i\) 的序列,最后一个元素是 \(a_j\) 的个数
对于序列 \(b\) 相邻元素的 \(b_i\),\(b_{i+1}\) 的的限制只有 \(3 \mid b_i \bigoplus b_{i+1}\)
可以考虑构造矩阵 \(M\) 描述 \(a_i\) 和 \(a_j\) 的转移关系
\(M_{ij} = 1\) 当 \(3 \mid a_i \bigoplus a_j\)
\(M_{ij} = 0\) 当 \(3 \nmid a_i \bigoplus a_j\)
快速幂计算 \(f[i]M^{k-1}\) 即可
代码
注意矩阵运算不满足交换律 (\(res \times qpow(M, n)\) 处)
\(\_\_ popcount((ull))\) 处要开 \(ull\) 而不能是 \(unsigned\)