题目:
?
思路分析:
只要是对UDLR全排列,实质上就已经尽可能的避免了重复板块。如果这样都有重叠的,也就意味着再怎么打乱也不行!
代码实现:
/*
*@Author: GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
/*
* __----~~~~~~~~~~~------___
* . . ~~//====...... __--~ ~~
* -. \_|// |||\\ ~~~~~~::::... /~
* ___-==_ _-~o~ \/ ||| \\ _/~~-
* __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~
* _-~~ .=~ | \\-_ '-~7 /- / || \ /
* .~ .~ | \\ -_ / /- / || \ /
* / ____ / | \\ ~-_/ /|- _/ .|| \ /
* |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\
* ' ~-| /| |-~\~~ __--~~
* |-~~-_/ | | ~\_ _-~ /\
* / \ \__ \/~ \__
* _--~ _/ | .-~~____--~-/ ~~==.
* ((->/~ '.|||' -_| ~~-/ , . _||
* -_ ~\ ~~---l__i__i__i--~~_/
* _-~-__ ~) \--______________--~~
* //.-~~~-~_--~- |-------~~~~~~~~
* //.-~~~--\
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 神兽保佑 永无BUG
*/
int a[4]={0,1,2,3};
int op[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int cnt[4]={0};
map<int,char>mp;
int t;
int x,y;
int check(){
int x1=0;
int y1=0;
for(int i=0;i<4;i++){
for(int j=0;j<cnt[a[i]];j++){
x1+=op[a[i]][0];
y1+=op[a[i]][1];
if(x1==x&&y1==y){
return 0;
}
}
}
return 1;
}
int main(){
cin>>t;
mp[0]='U';
mp[1]='D';
mp[2]='L';
mp[3]='R';
while (t--) {
cin>>x>>y;
int flag=0;
string s;
cin>>s;
int x1=0,y1=0;
mms(cnt,0);
for(int i=0;i<4;i++){
a[i]=i;
}
for(int i=0;i<s.size();i++){
if(s[i]=='U') cnt[0]++,y1++;
if(s[i]=='D') cnt[1]++,y1--;
if(s[i]=='L') cnt[2]++,x1--;
if(s[i]=='R') cnt[3]++,x1++;
}
if((x==0&&y==0)||(x1==x&&y1==y)){
cout<<"Impossible\n";
continue;
}
do{
if(check()){
flag=1;
for(int i=0;i<4;i++){
for(int j=0;j<cnt[a[i]];j++){
cout<<mp[a[i]];
}
}
cout<<endl;
break;
}
}
while(next_permutation(a,a+4));
if(!flag){
cout<<"Impossible\n";
}
}
return 0;
}
/**
* ┏┓ ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃ ┃
* ┃ ━ ┃ ++ + + +
* ████━████+
* ◥██◤ ◥██◤ +
* ┃ ┻ ┃
* ┃ ┃ + +
* ┗━┓ ┏━┛
* ┃ ┃ + + + +Code is far away from
* ┃ ┃ + bug with the animal protecting
* ┃ ┗━━━┓ 神兽保佑,代码无bug
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛ + + + +
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛+ + + +
*/
|