E 题解
先对 SG 进行打表发现 。
考虑第一次操作的三角形三条边跨越 条边,则剩下为 要等于 才能赢。
先枚举这三个数 得到的余数,这样剩下部分都是 的倍数,直接除以 就是 SG 了。
问题转换成了对于一定值 求有多少 。
从低到高考虑 的每一位 怎么选。容易发现如果都选 就不会进位,否则就有进位。
同时 最低位必须是 ,所以只会进其中一个分支,这样就能递归算了。
最后形状相同的可以旋转,答案要乘上 。
复杂度 。
E 题解
先对 SG 进行打表发现 SG[i]=[i/3]。
考虑第一次操作的三角形三条边跨越 a,b,c 条边,则剩下为 SG[a−1]xorSG[b−1]xorSG[c−1] 要等于 0 才能赢。
先枚举这三个数 mod3 得到的余数,这样剩下部分都是 3 的倍数,直接除以 3 就是 SG 了。
问题转换成了对于一定值 n 求有多少 a+b+(axorb)=n。
从低到高考虑 n 的每一位 a,b 怎么选。容易发现如果都选 0 就不会进位,否则就有进位。
同时 n 最低位必须是 0,所以只会进其中一个分支,这样就能递归算了。
最后形状相同的可以旋转,答案要乘上 n。
复杂度 33×logn。