题解 | #E#

角剖分剖角

https://ac.nowcoder.com/acm/contest/44749/E

E 题解

先对 SG 进行打表发现 SG[i]=[i/3]SG[i]=[i/3]

考虑第一次操作的三角形三条边跨越 a,b,ca,b,c 条边,则剩下为 SG[a1]xorSG[b1]xorSG[c1]SG[a-1] xor SG[b-1] xor SG[c-1] 要等于 00 才能赢。

先枚举这三个数 mod3\bmod 3 得到的余数,这样剩下部分都是 33 的倍数,直接除以 33 就是 SG 了。

问题转换成了对于一定值 nn 求有多少 a+b+(axorb)=na+b+(a xor b)=n

从低到高考虑 nn 的每一位 a,ba,b 怎么选。容易发现如果都选 00 就不会进位,否则就有进位。

同时 nn 最低位必须是 00,所以只会进其中一个分支,这样就能递归算了。

最后形状相同的可以旋转,答案要乘上 nn

复杂度 33×logn3^3\times \log n

全部评论

相关推荐

仁者伍敌:实习生要工作经验,工作要实习经验
点赞 评论 收藏
分享
自学java狠狠赚一...:骗你点star的,港卵公司,记得把star收回去
点赞 评论 收藏
分享
07-09 15:55
门头沟学院 Java
点赞 评论 收藏
分享
评论
9
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务