题意
给定一个
n
∗
m
n*m
n∗m的矩形方格纸,每次可以把它裁为两个子矩形,若裁出一个
1
∗
1
1*1
1∗1则胜,判断先手是否必胜。
n
≤
2000
,
m
≤
2000
n\le 2000,m\le 2000
n≤2000,m≤2000
题解
直观的想法是设 f [ i ] [ j ] f[i][j] f[i][j]为 i ∗ j i*j i∗j的矩形是否必胜,用 s g sg sg函数转移。试完样例后发现是假的,因为 s g sg sg函数只适用于如 l i m lim lim游戏一类的转移到的子状态要全部满足一个条件才必胜,才可用异或和合并,而此题只要一个子状态满足条件即获胜。之后想了很多奇怪的DP或猜结论,发现都是假的。考虑如何把它转化为 s g sg sg的模型,发现对于 1 ∗ n 1*n 1∗n是必胜的,每个人一定都不想转到有1*n的子状态,而对于 2 ∗ 2 , 2 ∗ 3 , 3 ∗ 3 2*2,2*3,3*3 2∗2,2∗3,3∗3又只能转到 1 ∗ n 1*n 1∗n,故必败。所以每个人一定都尽量想最后把矩形拆分为若干 2 ∗ 2 , 2 ∗ 3 , 3 ∗ 3 2*2,2*3,3*3 2∗2,2∗3,3∗3的矩阵,因为如果最后全部都是 2 ∗ 2 , 2 ∗ 3 , 3 ∗ 3 2*2,2*3,3*3 2∗2,2∗3,3∗3,就必胜。于是问题就转化为一个全局都满足一个条件的博弈问题,即可用 s g sg sg函数直接解决。