Description
现在wanghang有一个字符串,这个字符串全部由大写字母组成,wanghang想知道由这个字符串的组成所有字母生成的由字典序从小到大的全排列是什么?
Input
Output
对每组数据,按照当前的优先级,输出前K大的排列(不足K个则全部输出,去掉重复的)
Sample Input
Sample Output
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cstring>
#include<algorithm>
using namespace std;
char s[105];
struct xx
{
int i;
char x;
}node[26];
int a[26];
int L,k;
bool cmp(xx A,xx B)
{
if(a[A.x-'A']!=a[B.x-'A'])
return a[A.x-'A']<a[B.x-'A'];
return A.x<B.x;
}
void dfs(string now,int x)
{
if(!k) return ;
if(x==L)
k--,cout<<now<<endl;
for(int i=0;i<26;++i)
{
if(node[i].i)
{
node[i].i--;
dfs(now+node[i].x,x+1);
node[i].i++;
}
}
}
int main()
{
// freopen("data.in","r",stdin);
// freopen("data.out","w",stdout);
int N;
cin>>N;
while(N--)
{
int i,j;
string now="";
for(i=0;i<26;++i)
node[i].i=0,node[i].x='A'+i;
scanf("%s",s);
L=strlen(s);
for(i=0;i<L;++i)
node[s[i]-'A'].i++;
for(i=0;i<26;++i)
cin>>a[i];
cin>>k;
sort(node,node+26,cmp);
dfs(now,0);
}
return 0;
}