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 "";
}
};
相关文章推荐
- TopCoder SRM 660 Div2 Problem 1000 - Powerit (数论)
- TopCoder SRM 648 Div2 Problem 1000 - ABC (DP)
- TopCoder SRM 649 Div2 Problem 1000 - XorSequenceEasy (思维)
- TopCoder SRM 663 Div2 Problem 1000 - CheeseRolling (状压dp)
- TopCoder SRM 634 Div2 Problem 500 - ShoppingSurvey
- TopCoder SRM 672 Div2 Problem 1000 - Tdetectived2 (状压dp)
- TopCoder SRM 652 Div2 Problem 1000 - NoRightTurnDiv2 (几何 + 贪心)
- TopCoder SRM 657 Div2 Problem 1000 - PolynomialRemainder(数学)
- TopCoder SRM 668 Div2 Problem 1000 - AnArray (数学)
- TopCoder SRM 670 Div2 Problem 1050 - Treestrat (floyd)
- TopCoder SRM 651 Div2 Problem 500 - FoxAndSouvenirTheNext (DP)
- Topcoder SRM 517 DIV2 1000 CuttingGrass
- Topcoder SRM 543 DIV2 1000 EllysThreeRivers & DIV1 500 EllysRivers
- TopCoder SRM 633 Div2 Problem 500 - Jumping
- TopCoder SRM 667 Div1 Problem 250 - OrderOfOperations (状压dp)
- Topcoder SRM 566 DIV2 1000 FencingPenguinsEasy
- TopCoder SRM 660 Div2 Problem 500 - PrivateD2party (贪心)
- Topcoder SRM 616 Div2 1000 TwoLLogo
- TopCoder SRM 646 Div2 Problem 500 - TheGridDivTwo (BFS + 优先队列)
- TopCoder SRM 663 Div2 Problem 500 - ABBA (思维)