设a[i,j]=0/1表示格子的颜色,由题意,f(i,j)=a[i,j]^a[i+1,j]^a[i,j+1]^a[i+1,j+1]=1。
对于约束a[x,y]=c(x>1,y>1), ^^f(i,j)(1<=i<=x,1<=j<=y)=a[1,1]^a[1,y]^a[x,1]^a[x,y]=((x-1)*(y-1))&1
考虑枚举a[1,1]的值,则约束a[x,y]=c转变为a[1,y]^a[x,1]=(((x-1)*(y-1))&1)^a[1,1]^c,即知道了a[1,y]和a[x,1]的异同。
不妨用带权并查集维护这样的异同关系,注意到一旦确定了a[1,..]和a[..,1]就能确定出整个棋盘,因此答案为pow(2,独立块数目)
而对于a[x,1]/a[1,y]=c(x>1,y>1)这样的约束……可以和假设的a[1,1]绑定……
再对于a[1,1]=c这样的……就没什么假设的了
注意如果标号a[i,1]为i,a[1,j]为j+n,有前提“1,n+1是相同的”。
鴿子王從不貼代碼
本文探讨了一种基于异或运算的棋盘颜色约束问题,通过枚举初始格子值和使用带权并查集来维护格子间的异同关系,最终通过计算独立块数目得出解决方案。特别关注了如何通过假设的a[1,1]值来转变约束条件,并详细解释了确定整个棋盘颜色的方法。
2717

被折叠的 条评论
为什么被折叠?



