USACO checker challenge

Chart  1

 

 1

 

 

 

 *

 

 

 *

 

 *

 

 

 

 

 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Chart  2

row

1

2

3

4

5

6

col

 

 

 

 

 

 

 

分析:

  1. 棋盘为正方形矩阵,可旋转,翻转,row-1 只需要测试 1-3三种取值时能否得到满足条件的结果(翻转性质)。
  2. 从row-1 到 row-6 确定组合结果,row效验可避免(向 chart 2 中填写方式避免行交错)
  3. 列检测依靠每个col 号只能出现一次(我使用bool数组标记)
  4. 斜向检测,由于checker放置顺序,因此只需检测斜向上位移重叠(下侧未放置checker)。Chart 1为冲突结果

 

关键点:

  1. 旋转的性质在这题里面貌似无用。
  2. 翻转:可以使搜索次数减半(第一行只需要搜索[0,(n-1)/2]),但符合条件的结果在n为奇数的时候要考虑第一行落点在位置时符合条件的结果数量,以便在后面计算总结果使用(结果数=搜索结果数*2 ,如果 n为奇数,再减去第一行为(n-1)/2的结果数)
  3. 当一半结果小于3个时,要从最后一个符合结果翻转放置在后半部分第一个,依次类推(可避免排序,反转)
posted @ 2013-03-25 13:50  rqg  阅读(193)  评论(0编辑  收藏  举报