原文链接:https://www.luogu.com.cn/problem/P1061
AC代码:
#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int s,t,w;
char st='a',et='a';
int visit[27];
string ss;
vector<string> con;
vector<char> vec;
int cmp(const string &a,const string &b){
for(int i=0;i<a.length();i++){
if(a[i]!=b[i]) return a[i]<b[i];
}
}
void dfs(char c){
int i,j;//cout<<c<<endl;cout<<vec.size()<<" "<<w<<endl;
if(vec.size()==w){
string s="";
for(j=0;j<vec.size();j++){
s+=vec[j];
}
con.push_back(s);//cout<<s<<endl;
return ;
}
for(char now=c;now<=et;now++){
i=now-'a';
if(visit[i]==1) continue;
visit[i]=1;
vec.push_back(now);
dfs(now);
vec.pop_back();
visit[i]=0;
}
}
int main(){
int i,j;
cin>>s>>t>>w;
st+=s-1;et+=t-1;
cin>>ss;
memset(visit,0,sizeof(visit));
dfs(st);
sort(con.begin(),con.end(),cmp);
for(i=0;i<con.size();i++){
if(con[i]==ss){
i++;break;
}
}
for(j=0;i<con.size()&&j<5;i++,j++){
cout<<con[i]<<endl;
}
return 0;
}