P1087

[HNOI2007]胜负一子

[HNOI2007]胜负一子

五子棋是一种流传广泛的棋类游戏。棋盘大小为 15×1515\times 15,对弈双方分别执黑子和白子,黑方先行。棋子落下后不能被提起,即不存在挪子或吃子的情况。为简化问题,假设黑方不存在“禁手”。

当一方率先在横向、纵向、4545 度斜线方向或 135135 度斜线方向形成连续的 55 枚己方棋子时,该方获胜。

现在给定一盘轮到黑方落子的残局。双方从当前局面开始,轮流在空位落子,黑方先走,白方会采取最优策略阻止黑方获胜。一次“黑方步数”是指黑方落下一枚棋子。

请计算黑方保证获胜所需的最少黑方步数,并给出所有能够保证黑方在该最少步数内获胜的第一手落子位置。

输入格式

输入共 1515 行,每行包含 1515 个由空格分隔的整数。

第 ii 行、第 jj 列的整数记为 vi,jv_{i,j}:

  • vi,j=0v_{i,j}=0 表示该位置为空;
  • vi,j=1v_{i,j}=1 表示该位置有一枚黑子;
  • vi,j=2v_{i,j}=2 表示该位置有一枚白子。

棋盘从左上角开始,按照从左到右、从上到下的顺序输入。即 v1,1v_{1,1} 表示第 11 行第 11 列位置的状态,v15,15v_{15,15} 表示第 1515 行第 1515 列位置的状态。

输出格式

第一行输出两个整数 aa 和 bb。

其中,aa 表示从当前局面开始,在白方任意合法应对下,黑方保证获胜所需的最少黑方落子次数;bb 表示能够保证黑方恰好在 aa 步内获胜的不同第一手落子位置数。

接下来 bb 行,每行输出两个整数 ii 和 jj,表示一种满足条件的第一手落子位置,即第 ii 行、第 jj 列。

所有位置按照 15i+j15i+j 的值从小到大排列。

样例输入

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 2 0 2 0 0 0 0 0
0 0 0 0 0 0 2 1 1 2 0 0 0 0 0
0 0 0 0 0 0 0 1 2 1 0 0 0 0 0
0 0 0 0 0 0 2 1 1 1 1 2 0 0 0
0 0 0 0 0 0 0 1 0 1 0 1 0 0 0
0 0 0 0 0 0 2 2 0 1 1 0 2 0 0
0 0 0 0 0 0 0 0 0 2 0 2 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

样例输出

3 3
7 11
10 9
10 11

数据范围

  • 棋盘大小为 15×1515\times 15;
  • 输入保证当前局面尚未分出胜负,且轮到黑方落子;
  • 所有非空棋子的位置互不冲突;
  • 输入保证黑方存在强制获胜策略,并且在白方最优应对下,黑方至多落子 88 次即可获胜。

来源与许可

本题为 HNOI 2007 试题「胜负一子」,题面与测试数据整理自 BZOJ。

样例 1

输入

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 2 0 2 0 0 0 0 0
0 0 0 0 0 0 2 1 1 2 0 0 0 0 0
0 0 0 0 0 0 0 1 2 1 0 0 0 0 0
0 0 0 0 0 0 2 1 1 1 1 2 0 0 0
0 0 0 0 0 0 0 1 0 1 0 1 0 0 0
0 0 0 0 0 0 2 2 0 1 1 0 2 0 0
0 0 0 0 0 0 0 0 0 2 0 2 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

输出

3 3
7 11
10 9
10 11