英雄会第一届在线编程大赛:单词博弈 (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不会影响原思路的判断的,随便给的而已


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值