单词玩游戏

思路,首先,简单分析,对于单词中有一点数量,假如是 n 个 的字符,其位置是错乱的,即其大于之后一位。如果在不删除正确的单词的情况下,双方都删除错误的,由于错误的消失不会只会是n减1,则,当这个数量是奇数的时候,甲赢,如果是偶数的时候,乙赢。先试试这种简单的想法,因为复杂的还有双方使用删除未错乱字符以博弈。

提交:


#include <iostream>
#include <string>
#include <sstream>

#include <vector>

using namespace std;

void main(){



	string word;
	int wrong = 0;
	cin>>word;
	for(int i = 0 ; i < word.length() - 1; i++)
		if(word[i] >= word[i + 1])
			wrong ++;
	if(wrong % 2 == 1)
		cout<<"1"<<endl;
	else
		cout<<"0"<<endl;



}


正确,这个时候,我们在仔细分析一下其中思路:

当有一个错误是 bda,这个时候删除最后一个a即可顺序,则说明对于 用于一个错位,无论何种顺序,对甲是必胜的。

当有两个错误,我们考虑复杂的情况,即删除一个错位后生成一个新的错位的情况  , ab c h b a ,这种删除仍不变的情况可以类比删除正常顺序时的情况。之前我还考虑了另外一个情况 ab hb a,对于这个情况,无论甲如何操作,都是必败的,然后,我给甲多加了一个c,让其多了一部反应机会,然后,情况就发生了改变,当甲选择消去c时,将这个情况还给了乙,而对于乙,这是必败的局,所以,这个解法是不正确的,当玩家选择消去正确,以坑对手时,这就与正确顺序的字符数也有关系。至于现在这道题目给我正确,说明出题者跟我一样,没有仔细思考问题,这是不应该的。

然后考虑正确顺序的字符的消去。首先,双方都会这样做。则当顺序数为 基 时, 这是甲该赢的情况,如果为1,则甲已赢,如果不为 1,则甲乙都会去消去正序或逆序,在一定程度,即使逆序数到达2 之前,这两种操作是一样,所以,我们可以假定双方先将正序消完,然后在消逆序使2 个逆序的字母加任意一个其他的字母留到最后,这时,论到谁谁就输了。也就是拿总数 - 3 除2 求余, 弱有余 1 则甲赢, 若不余,乙赢。





你可能感兴趣的:(单词玩游戏)