ACM 10098 Q10098: Generating Fast, Sorted Permutation
作法 : 生成重複排列
速度不夠快
SO SAD
/***********************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int num[256]={0},line[100]={0};
int n,sum,MAX,MIN;
void make (int k)
{
int a;
if(k>sum)
{
for(a=1;a<=sum;a++)
putchar(line[a]);
puts("");
return;
}
for(a=MIN;a<=MAX;a++)
if(num[a]>0)
{
num[a]--;
line[k]=a;
make(k+1);
num[a]++;
}
}
main()
{
int t;
char s[12];
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int a;
MAX=0;
MIN=256;
sum=strlen(s);
for(a='A';a<='z';a++) num[a]=0;
for(a=0;a<sum;a++)
{
num[s[a]]++;
if(MAX<s[a]) MAX=s[a];
if(MIN>s[a]) MIN=s[a];
}
make (1);
printf("\n");
}
return 0;
}