まさかのバックトラック
string rec(priority_queue<int> q, char next, string s, int L)
{
if (L < s.size() + q.size()) return "";
if (L == s.size() + q.size()) {
while (q.size()) {
s += (char)(-1 * q.top());
q.pop();
}
return s;
}
priority_queue<int> p;
if (q.size()) {
p = q;
string t = s + (char)(-1 * p.top());
p.pop();
t = rec(p, next, t, L);
if (t.size()) return t;
}
for (int i = s.size(); i < L; ++i) {
if (s.size() + q.size() + s.size() + 1 <= L) {
p = q;
for (int j = 0; j < (int)s.size(); ++j) {
p.push(-1 * next);
}
string t = rec(p, next + 1, s + next, L);
if (t.size()) return t;
}
}
return "";
}
class IdealString {
public:
string construct(int L)
{
return rec(priority_queue<int>(), 'A', "", L);
}
};