[HNOI2007]胜负一子
五子棋是一种流传广泛的棋类游戏。棋盘大小为 ,对弈双方分别执黑子和白子,黑方先行。棋子落下后不能被提起,即不存在挪子或吃子的情况。为简化问题,假设黑方不存在“禁手”。
当一方率先在横向、纵向、 度斜线方向或 度斜线方向形成连续的 枚己方棋子时,该方获胜。
现在给定一盘轮到黑方落子的残局。双方从当前局面开始,轮流在空位落子,黑方先走,白方会采取最优策略阻止黑方获胜。一次“黑方步数”是指黑方落下一枚棋子。
请计算黑方保证获胜所需的最少黑方步数,并给出所有能够保证黑方在该最少步数内获胜的第一手落子位置。
输入格式
输入共 行,每行包含 个由空格分隔的整数。
第 行、第 列的整数记为 :
- 表示该位置为空;
- 表示该位置有一枚黑子;
- 表示该位置有一枚白子。
棋盘从左上角开始,按照从左到右、从上到下的顺序输入。即 表示第 行第 列位置的状态, 表示第 行第 列位置的状态。
输出格式
第一行输出两个整数 和 。
其中, 表示从当前局面开始,在白方任意合法应对下,黑方保证获胜所需的最少黑方落子次数; 表示能够保证黑方恰好在 步内获胜的不同第一手落子位置数。
接下来 行,每行输出两个整数 和 ,表示一种满足条件的第一手落子位置,即第 行、第 列。
所有位置按照 的值从小到大排列。
样例输入
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
数据范围
- 棋盘大小为 ;
- 输入保证当前局面尚未分出胜负,且轮到黑方落子;
- 所有非空棋子的位置互不冲突;
- 输入保证黑方存在强制获胜策略,并且在白方最优应对下,黑方至多落子 次即可获胜。
来源与许可
本题为 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