HDU6351-Beautiful Now
阿新 • • 發佈:2019-01-09
DFS
#include<bits/stdc++.h>
using namespace std;
string n,minans,maxans;
int k,len;
void dfs1(string s,int pos,int step){
if(pos>=len||step>=k) {minans=min(minans,s);return;}
bool flag=false;
for(int i=pos+1;i<len;i++){
if(pos==0&&s[i]=='0') continue;
if (s[pos]>s[i]){
string tmp=s;
swap(tmp[pos],tmp[i]);
flag=true;
dfs1(tmp,pos+1,step+1);
}
}
if(!flag) dfs1(s,pos+1,step);
}
void dfs2(string s,int pos,int step){
if(pos>=len||step>=k) {maxans=max(maxans,s);return;}
bool flag=false;
for(int i=pos+1;i<len;i++){
if(s[pos]<s[i]){
string tmp=s;
swap(tmp[pos],tmp[i]);
flag=true;
dfs2(tmp,pos+1,step+1);
}
}
if(!flag) dfs2(s,pos+1,step);
}
int main(){
ios::sync_with_stdio(false);
cin .tie(0);
int T;
scanf("%d",&T);
while(T--){
cin>>n;
minans=maxans=n;
scanf("%d",&n);
len=n.length();
dfs1(n,0,0);
dfs2(n,0,0);
cout<<minans<<" "<<maxans<<endl;
}
return 0;
}