Я работаю над this problem, и мое решение, похоже, работает на каждый случай, который я могу себе представить, чтобы попробовать и сделать это в течение 3-секундного срока, но когда я отправляю онлайн, он все равно превышает 3 секунд. Я думаю, что должно быть так, что вызывает это время цикла, чтобы продолжаться бесконечно:Найти скрытую бесконечную петлю
while (!equals(availableChars, testChars)){
next = getNextAlphaString(high, next, availableChars, it);
fillCharSet(next, testChars);
}
, но я проверил мои функции кучу, и я не могу понять, что это такое ... надеясь, что вы, ребята, возможно, увидеть что-то. Вот вспомогательные функции:
bool equals(multiset<char>& availableChars, multiset<char>& test){
multiset<char>::iterator it;
for (it = availableChars.begin(); it != availableChars.end(); it++){
if ((int)availableChars.count(*it) != (int)test.count(*it)) return false;
}
return true;
}
*
string getNextAlphaString(char& high, string next, multiset<char>& availableChars, multiset<char>::iterator& it){
for (int i=next.size()-1; i>=0; i--){
if (next[i] != high){
it = availableChars.find(next[i]);
while(*it == next[i]){
it++;
if (it == availableChars.end()){it = availableChars.begin(); break;}
}
next[i] = *it;
break;}
else{
it = availableChars.begin();
next[i] = *it;
}
}
return next;
}
*
void fillCharSet(string in, multiset<char>& chars){
chars.clear();
for (int i=0; i<in.size(); i++){chars.insert(in[i]);}
}
Я собираюсь угадать, что вы не можете использовать 'std :: next_permutation'? – chris
Получить реальную пару компилятора/отладчика и попытаться найти для себя? –
@chris: Я понял, что вы не тот же самый крис. –