英雄会第一届在线编程大赛:单词博弈 (C++代码) ---miss若尘


解题思路:http://blog.csdn.net/miss_ruochen/article/details/17199887

不要忘了添加头文件呀吐舌头


int who_win (string word, map<string, int>& m)
{
	typedef pair <string, int> Who_Pair;

	int size = word.size();
	if(size < 2)
		return -1;

	if(size == 2)
		return 1;

	if(size == 3) {
		if(word[0] >= word[1] && word[1] >= word[2])
			return 0;
		else
			return 1;
	}

	for(int i = 0; i < size; ++i) {
		if(i != 0 && word[i] == word[i-1])
			continue;
			
		string str = word.substr(0,i)+word.substr(i+1,size-i-1);

		bool flag = true;
		for(int j = 0; j < size-2; ++j) {
			if(str[j] >= str[j+1]) {
				flag = false;
				break;
			}
		}
		if(flag)
			return 1;
	}

	for(int k = 0; k < size; ++k) {
		if(k != 0 && word[k] == word[k-1])
			continue;
			
		string strtmp = word.substr(0,k)+word.substr(k+1,size-k-1);
		map<string, int> :: iterator m_iter;
		m_iter = m.find(strtmp);
		int state;

		if(m_iter == m.end()) {
			state = who_win(strtmp, m);
			m.insert( Who_Pair (strtmp, state) );
		}
		else {
			state = m_iter->second;
		}

		if( !state )
			return 1;
	}
	
	m.insert( Who_Pair (word, 0) );
	return 0;
}

int who (string word)
{
	map<string, int> m;
	typedef pair <string, int> Who_Pair;

	m.insert( Who_Pair ("a",0) );

	return who_win(word, m);
}


忘了说,为什么我在who函数里要给map插入一个字符'a',因为我不想每次在查找前都要判断map是否为空,不知道频繁的判断是不是会降低速度,所以我宁愿随便插入点什么了,而且字符'a’长度为1不会影响原思路的判断的,随便给的而已


猜你喜欢

转载自blog.csdn.net/u012985817/article/details/17201057
今日推荐