#P0113. [2024小学组省赛] 博弈(game)

[2024小学组省赛] 博弈(game)

题目描述

小可可和小聪聪最近在玩黑白棋!

在介绍本问题之前,我们先介绍黑白棋规则:

1 . 游戏使用标准的 8×88 \times 8 棋盘,上面初始时有四枚棋子:两枚黑色棋子和两枚白色棋子,按照对角线交叉排列。

2 . 游戏开始时,黑方先行。

3 . 玩家的目标是通过翻转对手的棋子,将棋盘上的大多数格子占为己有。

4 . 每一步,玩家必须将自己的棋子放在一个合法的位置上。合法的位置必须满足以下条件: 新放置的棋子必须与棋盘上已有的同色棋子在一条直线(水平、垂直或对角线)上夹住对方的一串棋子(夹住的意思是,在夹住的一端是己方的棋子,另一端是对方的棋子)。 在夹住对方棋子的同时,所有被夹住的对方棋子都会被翻转成己方颜色。

5 . 如果某一方无法合法落子,则该回合轮到对方继续行动。

6 . 游戏继续进行,直到棋盘被填满或双方都无法合法落子。

7 . 游戏结束时,棋盘上棋子数较多的一方获胜。如果双方棋子数相同,则为平局。

给定一个 n×nn \times n 棋盘上的黑白棋残局,对于接下来所有的可能局面——也就是说,黑方白方轮流行棋,白方先行,走到双方都无法行棋,在所有的可能状态中,最终黑方获胜的有多少种,白方获胜的有多少种,平局有多少种。

在本题中,我们定义残局为最多有不超过 10 个未被放入棋子的格子。

需要注意的是:我们给出的棋盘不一定能够从一个合法的开局得到。你无需关心当前棋盘局面是如何形成的——即便它并不连通。

输入格式

第一行,一个整数 nn,表示这个棋盘的大小是 n×nn \times n

接下来 nn 行,每行 nn 个整数,表示棋盘。如果这个数是 0,表示这里是白子,如果这个数是 1,表示这里是黑子,如果这个数是 1-1,表示这里是空的。

输出格式

一行,三个整数,黑方胜利的状态数,白方胜利的状态数,平局的状态数。

输入输出样例

输入样例1:

3  
-1 0 1  
0 1 0  
1 0 -1  

输出样例1:

2 0 0

输入样例2:

4  
-1 -1 -1 -1  
-1 0 1 0  
-1 1 0 1  
-1 -1 -1 -1  

输出样例2:

1813 2494 519

说明

约定和数据范围

数据点 范围
1 ∼ 6 1n31 \leq n \leq 3,空格子数不超过 4
7 ∼ 12 1n41 \leq n \leq 4,空格子数不超过 5
13 ∼ 18 1n41 \leq n \leq 4,空格子数不超过 10
19 ∼ 23 1n51 \leq n \leq 5,空格子数不超过 5
24 ∼ 25 1n51 \leq n \leq 5,空格子数不超过 10