AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 3. Brute Force :: Elementary Skills
// 10098 - Generating Fast
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main(void)
{
int i, n, len;
char s[11];
while(cin >> n)
while(n--)
{
cin >> s;
len = strlen(s);
sort(s, s+len);
do{
for(i=0; i<len; i++)
cout << s[i];
cout << endl;
}while(next_permutation(s, s+len));
cout << endl;
}
return 0;
}
Time limit exceeded:
// 10098 - Generating Fast
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void print_permutation(int cur, int n, char* s, char p, char q)
{
int i, j;
char ch;
if(cur == n)
{
for(i=0; i<n; i++)
cout << s[i];
cout << endl;
}
else
{
for(ch=p; ch<=q; ch++)
{
int ok = 1;
for(j=0; j<cur; j++)
if(s[j] == ch)
ok = 0;
if(ok)
{
s[cur] = ch;
print_permutation(cur+1, n, s, p, q);
}
}
}
}
int main(void)
{
int n, len;
char s[11];
while(cin >> n)
while(n--)
{
cin >> s;
len = strlen(s);
sort(s, s+len);
print_permutation(0, len, s, s[0], s[len-1]);
cout << endl;
}
return 0;
}