英雄会第1回オンラインプログラミングコンテスト:単語ゲーム(C++コード)---miss若塵
問題解決の考え方:http://blog.csdn.net/miss_ruochen/article/details/17199887
ヘッダーファイルを追加するのを忘れないでください.
なぜ私はwho関数の中でmapに1つの文字'a'を挿入しなければならないのかを忘れて、私は毎回検索する前にmapが空であるかどうかを判断したくないので、頻繁な判断が速度を下げるかどうか分からないので、私はむしろ勝手に何かを挿入して、しかも文字'a'の長さが1で元の考え方の判断に影響しないで、勝手にあげただけです
ヘッダーファイルを追加するのを忘れないでください.
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に1つの文字'a'を挿入しなければならないのかを忘れて、私は毎回検索する前にmapが空であるかどうかを判断したくないので、頻繁な判断が速度を下げるかどうか分からないので、私はむしろ勝手に何かを挿入して、しかも文字'a'の長さが1で元の考え方の判断に影響しないで、勝手にあげただけです