USACO checker challenge
Chart 1
|
1 |
|
|
|
* |
|
|
* |
|
* |
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chart 2
row |
1 |
2 |
3 |
4 |
5 |
6 |
col |
|
|
|
|
|
|
分析:
- 棋盘为正方形矩阵,可旋转,翻转,row-1 只需要测试 1-3三种取值时能否得到满足条件的结果(翻转性质)。
- 从row-1 到 row-6 确定组合结果,row效验可避免(向 chart 2 中填写方式避免行交错)
- 列检测依靠每个col 号只能出现一次(我使用bool数组标记)
- 斜向检测,由于checker放置顺序,因此只需检测斜向上位移重叠(下侧未放置checker)。Chart 1为冲突结果
关键点:
- 旋转的性质在这题里面貌似无用。
- 翻转:可以使搜索次数减半(第一行只需要搜索[0,(n-1)/2]),但符合条件的结果在n为奇数的时候要考虑第一行落点在位置时符合条件的结果数量,以便在后面计算总结果使用(结果数=搜索结果数*2 ,如果 n为奇数,再减去第一行为(n-1)/2的结果数)
- 当一半结果小于3个时,要从最后一个符合结果翻转放置在后半部分第一个,依次类推(可避免排序,反转)