题解:没有全黑直线的棋盘¶
出题人解法:预先计算固定定义域的答案,再顺序输出。Codex(GPT-6)验证答案表,并补充按镜像行对分类的容斥计算程序与证明。
固定答案表(首选)¶
题目没有输入,输出固定的 21 个余数。标准程序保存这些数并逐行输出。对最大阶数 \(N\) ,在线时间和表空间均为 \(O(N)\) ;此处 \(N=20\) .正确性还需要说明这些常量如何得到,不能仅以存在一张表作为证明。
容斥方案给出完整推导,计算程序在运行时重新生成全部答案,与固定表完全一致。它同样通过完整数据;其价值是答案可直接重建,而固定表减少在线计算。两者都包含 \(n=0\) 的特判。
按列覆盖状态的计算思路¶
出题人的另一种计算思路是逐行填色:状态集合 \(S\) 表示还未出现白格的列。当前行从这些列中选择子集 \(U\) 放白格,更新为 \(S\setminus U\) ;已经出现白格的列可任意填色,但要排除本行全黑。若钦定某条对角线全黑,该行对应格子不能放白。
逐行枚举全部合法选择,初始 \(S\) 为所有列,最后取 \(S=\varnothing\) ,即可确保行列均不全黑。每个棋盘对应唯一的逐行选择,所以没有重复计数。再对两条对角线做容斥。枚举状态及其子集需要每阶 \(O(n3^n)\) 时间、\(O(2^n)\) 空间;它适合离线小规模计算,不能作为完整范围的在线标程。镜像行对分类在本题中避免了指数枚举。