文章目录
- @[toc]
- 试题编号
- 试题名称
- 时间限制
- 内存限制
- 题目背景
- 问题描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 样例说明
- 子任务
- 提示
- `Python`实现
文章目录
- @[toc]
- 试题编号
- 试题名称
- 时间限制
- 内存限制
- 题目背景
- 问题描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 样例说明
- 子任务
- 提示
- `Python`实现
试题编号
202305-1
试题名称
重复局面
时间限制
1.0s
内存限制
512.0MB
题目背景
- 国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋
问题描述
- 国际象棋每一个局面可以用大小为 8 × 8 8 \times 8 8×8的字符数组来表示,其中每一位对应棋盘上的一个格子
- 六种棋子王、后、车、象、马、兵分别用字母 k k k、 q q q、 r r r、 b b b、 n n n、 p p p表示,其中大写字母对应白方、小写字母对应黑方
- 棋盘上无棋子处用字符
*
表示 - 两个字符数组的每一位均相同则说明对应同一局面
- 现已按上述方式整理好了每步棋后的局面,试统计每个局面分别是第几次出现
输入格式
- 从标准输入读入数据
- 输入的第一行包含一个正整数 n n n,表示这盘棋总共有 n n n步
- 接下来 8 × n 8 \times n 8×n行,依次输入第 1 1 1到第 n n n步棋后的局面,具体来说每行包含一个长度为 8 8 8的字符串,每 8 8 8行字符串共 64 64 64个字符对应一个局面
输出格式
- 输出到标准输出中
- 输出共 n n n行,每行一个整数,表示该局面是第几次出现
样例输入
8
********
******pk
*****r*p
p*pQ****
********
**b*B*PP
****qP**
**R***K*
********
******pk
*****r*p
p*pQ****
*b******
****B*PP
****qP**
**R***K*
********
******pk
*****r*p
p*p*****
*b**Q***
****B*PP
****qP**
**R***K*
******k*
******p*
*****r*p
p*p*****
*b**Q***
****B*PP
****qP**
**R***K*
******k*
******p*
*****r*p
p*pQ****
*b******
****B*PP
****qP**
**R***K*
********
******pk
*****r*p
p*pQ****
*b******
****B*PP
****qP**
**R***K*
********
******pk
*****r*p
p*p*****
*b**Q***
****B*PP
****qP**
**R***K*
********
******pk
******rp
p*p*****
*b**Q***
****B*PP
****qP**
**R***K*
样例输出
1
1
1
1
1
2
2
1
样例说明
- 第 6 6 6、 7 7 7步后的局面分别与第 2 2 2、 3 3 3步后的局面相同
- 第 8 8 8步后的局面与上图相对应
子任务
- 输入数据满足 n ≤ 100 n \leq 100 n≤100
提示
- 判断重复局面仅涉及字符串比较,无需考虑国际象棋实际行棋规则
Python
实现
n = int(input())m = []
for _ in range(n):temp = []for _ in range(8):str = input()temp.append(str)m.append(temp)res = [1 for _ in range(n)]for i in range(n - 1, -1, -1):for j in range(i):if (m[i] == m[j]):res[i] += 1for i in res:print(i)