您的位置:首页 > 运维架构

TopCoder SRM 634 Div2 Problem 1000 - SpecialStrings

2014-09-27 16:18 459 查看


题意

给一个字符串,求满足条件的下一个字典序的字符串。

条件:字符串首位和第i位的字符串的字典序比和i+1到末尾的字符串小


思路

从后面往前搜索。碰到第一个0,就把它变成1,然后检查之后的字符,看变为0能否符合条件。

第一个字符不能为1


代码

#include <cstdio>

#include <cmath>

#include <cstring>

#include <ctime>

#include <iostream>

#include <algorithm>

#include <set>

#include <vector>

#include <sstream>

#include <typeinfo>

#include <fstream>


using namespace std;


class SpecialStrings {

public:

bool Check(const string &str)

{

for (int i = 1; i < str.size(); i++)

if (str.substr(0, i) >= str.substr(i)) return false;

return true;

}


string findNext(string cur) {

int len = (int)cur.size();

if (len == 1 && cur[0] == '0') return "1";

int i, j;

for (i = len - 1; i >= 0; i--)

    {

if (cur[i] == '1') continue;

if (i == 0) return "";

cur[i] = '1';

for (j = i + 1; j < len; j++)

{

cur[j] = '0';

if (!Check(cur)) cur[j] = '1';

}

return cur;

}

return "";

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM TopCoder