NKOI 3539 移棋子游戏[6月月赛题A]

                                                                        移棋子游戏
问题描述

猫山大王和刘大姐在玩一个游戏。桌面上一行有n个格子,一些格子中放着棋子。猫山大王和刘大姐轮流选择如下方式中的一种移动棋子(图示中o表示棋子,*表示空着的格子):
1)当一枚棋子的右边是空格子的话,可以将这枚棋子像右移动一格。
**o*** -> ***o**
2)当一枚棋子的右边连续两个都有棋子,并且这个棋子往右边数第3格没有棋子,那么可以将这个棋子往右跳过那两个棋子
**ooo* -> ***oo*
当任何一枚棋子到达最右边的格子时,这枚棋子自动消失。当一方不能移动时,这方输。假设猫山大王和刘大姐都采取最优策略,猫山大王先走,谁将取胜?

输入格式

第一行一个整数T表示数据组数, 0 < T < 10。
之后T组数据,每组两行,
第一行n 表示格子个数,
第二行n个字符表示每个格子的情况,o表示有棋子,*表示空着。

输出格式

对于每组数据一个输出,M表示猫山大王赢,L表示刘大姐赢。

样例输入

4
2
*o
5
*o***
6
**o**o
14
*o***ooo**oo**

样例输出

L
M
M
L

提示

对于50%的数据, n <20。
对于100%的数据, n < 1000。


首先我们可以想到记忆化搜索,搜索所有的可能的情况,然而n=999的规模我们可以发现这么做并不可行

因此我们应该想一想更简单的方法

首先我们草稿纸演算可以发现,不论是第一种走法还是第二种走法,所有棋子到最右边的位置的距离和的奇偶性是必然会发生一次变化的。

第一次轮到猫山大王时,s是奇数,那么每次轮到猫山大王时s都是奇数。而当s是奇数时,s肯定>0,这时猫山大王总可以走最右边的棋子。也就是说当s为奇数时,总有棋子可以走。所以说,一开始若s为奇数,则猫山大王必胜。同理,若一开始s为偶数,则当刘大姐走的时候s总是奇数,所以猫山大王必败。

#include<iostream>
#include<cstdio>
using namespace std;
int t,n;
char c[1005];
int main(){
	cin>>t;
	while(t--){
		scanf("%d%s",&n,c+1);
		int i,sum=1;
		for(i=1;i<=n;i++)
		    if(c[i]=='o')
		        sum+=n-i;
		if(sum&1)puts("L");
		else puts("M");
	}
}



<think>我们面对的是一个关于"棋子游戏"的问。用户意图明确指向棋子游戏,但问描述比较简短。需要通过网络搜索来明确用户具体想了解什么。常见的棋子游戏可能有多种,如汉诺塔、独立钻石棋、跳棋等。考虑到用户未指定具体类型,需要覆盖基础概念和常见玩法。 搜索策略: 1. 先定义"棋子游戏"的基本概念和常见类型。 2. 介绍1-2种最经典的棋子游戏的规则和玩法,如汉诺塔和独立钻石棋(因为这两者非常典型)。 3. 提供这些游戏的基本解法思路(如果适用)。 注意:由于要求避免步骤词汇,我们将用分点但不使用顺序词,而是直接描述。同时,每个方法或步骤间换行。 由于要求中禁止将引用内容集中在末尾,所以需要在回答中自然融入信息源,但不要标注引用标记。 最后,按照要求生成相关问。 搜索关键词: - "棋子游戏 类型" - "汉诺塔 规则 解法" - "独立钻石棋 规则 解法" 开始搜索并整合信息。 </think>经过网络检索,"棋子游戏"通常指一类逻辑解谜游戏,玩家需通过棋子达成特定目标。以下是两类经典游戏规则及解法策略: ### 汉诺塔(Tower of Hanoi) 目标:将$n$个圆盘从A柱至C柱,动过程需满足: - 每次动一个圆盘 - 大圆盘不可叠在小圆盘上 - 仅使用A/B/C三根柱子 最优步数为$2^n-1$。递归解法: ```python def hanoi(n, source, target, auxiliary): if n > 0: hanoi(n-1, source, auxiliary, target) print(f"动圆盘 {n} 从 {source} 到 {target}") hanoi(n-1, auxiliary, target, source) hanoi(3, &#39;A&#39;, &#39;C&#39;, &#39;B&#39;) # 示调用 ``` ### 独立钻石棋(Peg Solitaire) 目标:除棋盘所有棋子仅留一枚在中心 棋盘初始布局(●为棋子,○为空位): ``` ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ○ ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ``` 核心策略: - 优先消除边缘棋子,保留中心控制权 - 创建"三角跳跃"链:每次跳过相邻棋子除被跳过的棋子 - 终局阶段确保最后一步跳至中心 两类游戏均需空间推理能力,可通过在线平台如「Puzzle Party」或「Brainbashers」进行练习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值