1 条题解
-
0
「CEOI2020」象棋世界 题解
题目大意
棋盘 , 很大(),。
五种棋子从 走到 ,求最少步数和方案数(模 )。
解法分析
1. 兵(P)
- 移动:只能向下走一格,列不变。
- 判断:
- 若 :无法到达,输出
0 0 - 否则:
- 若 :无法到达,输出
2. 车(R)
- 移动:沿行或列任意格。
- 判断:
- 若 :直接向下一步到达
- 否则:需要 步(竖-横 或 横-竖) 因为可以在任意一行转弯,共 种方案。
3. 象(B)
- 移动:沿对角线移动,颜色由 决定。
- 判断:
- 若 :颜色不同,无法到达,输出
0 0 - 否则:
- 若 :在同一条对角线上,一步到达
- 否则:需要 步
方案数 = 中间格个数。
设中间格为 ,满足: 解此方程组得到 的取值个数即为方案数。
- 若 :颜色不同,无法到达,输出
4. 后(Q)
- 移动:车 + 象的结合。
- 判断:
-
如果满足以下任一条件,则一步可达(方案数 = 1):
- (竖直线)
- (对角线)
- (颜色相同,但未必在同一条对角线) 实际上第3条是象的必达条件,但后可以直接走车的一步+象的一步?这里要修正:
正确一步条件:
- 在同一行/列:
- 在同一对角线:
- 实际上后一步可达当且仅当 或 或 (但 ),因为后可以走直线或斜线,但一步从 到 需要 或 。
-
否则:需要 步
方案数 = 车的 步方案数 + 象的 步方案数
即:
-
5. 王(K)
-
移动:八邻格。
-
最少步数:
因为每步最多在行方向前进 1,列方向最多变化 1。
-
方案数: 设 表示走到 的最少步数方案数。
转移:但 很大,使用矩阵快速幂优化:
- 状态:当前行的所有列
- 转移矩阵 : 当 ,否则
- 初始向量:,其余
- 答案:
复杂度 ,可接受( 时用优化矩阵乘法)。
总结
本题需要针对每种棋子特性分别处理:
- P、R、B、Q 主要靠数学推导和组合计数
- K 需要动态规划 + 矩阵快速幂
- 注意 很大时的模运算和高效计算
实现时注意边界情况和模数处理即可。
- 1
信息
- ID
- 4240
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者