题意:有n个格子拉成一个环,给你k,你能使用任意个数的0 ~ 2^k - 1,规定操作 i XNOR j 为~(i ^ j),要求相邻的格子的元素的XNOR为正数,问你有几种排法,答案取模1e9 + 7。本题所使用的数字为无符号位数字。
思路:无符号位,所以异或取反后为正数,只可能是两个数相加不为2^k - 1。所以转化为相邻两个数之和不为2^k - 1的排法有几种(首尾也不能)。这个问题很像扇形涂色问题。我们开dp[ n ][ 3 ]记录到第i长时的三种情况:头尾和不为2^k - 1且头尾不相等, 头尾相等,头尾和为2^k - 1。然后很好写出各自的转移方程。显然我们一共有元素2^k种,但是这个有个坑,就是我在用2^k - 1,2^k - 2时可能为负数,所以要+MOD % MOD。
代码:
#include #include #include #include