QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#506152#6422. Evil CoordinateAbclTL 0ms3536kbC++142.6kb2024-08-05 15:43:362024-08-05 15:43:36

Judging History

你现在查看的是最新测评结果

  • [2024-08-05 15:43:36]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:3536kb
  • [2024-08-05 15:43:36]
  • 提交

answer

#include <bits/stdc++.h>
#define int long long
using namespace std;
vector<char> ans;
int end_x,end_y;
unordered_map<char,int> mp;
int f=0;
int mx,my;
void solve() {
	cin>>mx>>my;
	string str;
	cin>>str;
	f=0;ans.clear();
	if(mx==0&&my==0) {
		cout<<"Impossible"<<endl;
		return;
	}
	mp.clear();
	for(int i=0; i<str.length(); i++) {
		mp[str[i]]++;//统计各个方向移动的指令数目
	}
	end_x=mp['R']-mp['L'];//不要取绝对值就是算最后的坐标
	end_y=mp['U']-mp['D'];
	if(mx==end_x&&my==end_y){
		cout<<"Impossible"<<endl;
		return;
	}
	
	if(mx==0&&my>0&&end_y>my){
		cout<<"Impossible"<<endl;
		return;
	}
	else if(mx==0&&my<0&&end_y<my){
		cout<<"Impossible"<<endl;
		return;
	}
	if(my==0&&mx>0&&end_x>mx){
			cout<<"Impossible"<<endl;
			return;
		}
	else if(my==0&&mx<0&&end_x<mx){				
		cout<<"Impossible"<<endl;
		return;
	}
	
	
	if(end_x!=mx&&end_y!=my) { //如果两个最终的结果都不跟坐标相同
			int nowx=0,nowy=0;
		while(mp['L']+mp['R']+mp['U']+mp['D']){
			if((nowx+1!=mx||nowy!=my)&&mp['R']){
				mp['R']--;nowx++;
				cout<<'R';	
			}
			else if((nowx-1!=mx||nowy!=my)&&mp['L']){
				mp['L']--;nowx--;
				cout<<'L';	
			}
			else if((nowx!=mx||nowy+1!=my)&&mp['U']){
				mp['U']--;nowy++;
				cout<<'U';	
			}
			else if((nowx!=mx||nowy-1!=my)&&mp['D']){
				mp['D']--;nowy--;
				cout<<'D';	
			}			
		}
		cout<<endl;
		return;
	} 
	
	else if(end_x!=mx&&end_y==my) {//若x不相同,但是y的坐标相同的话
	int nowx=0,nowy=0;
		while(mp['L']+mp['R']+mp['U']+mp['D']){
			if((nowx+1!=mx||nowy!=my)&&mp['R']){
				mp['R']--;nowx++;
				cout<<'R';	
			}
			else if((nowx-1!=mx||nowy!=my)&&mp['L']){
				mp['L']--;nowx--;
				cout<<'L';	
			}
			else if((nowx!=mx||nowy+1!=my)&&mp['U']){
				mp['U']--;nowy++;
				cout<<'U';	
			}
			else if((nowx!=mx||nowy-1!=my)&&mp['D']){
				mp['D']--;nowy--;
				cout<<'D';	
			}			
		}
		cout<<endl;
			return;
		
	} 
	else if(end_y!=my&&end_x==mx) { //如果y最后不相同但是x相同,
			int nowx=0,nowy=0;
		while(mp['L']+mp['R']+mp['U']+mp['D']){
			if((nowx+1!=mx||nowy!=my)&&mp['R']){
				mp['R']--;nowx++;
				cout<<'R';	
			}
			else if((nowx-1!=mx||nowy!=my)&&mp['L']){
				mp['L']--;nowx--;
				cout<<'L';	
			}
			else if((nowx!=mx||nowy+1!=my)&&mp['U']){
				mp['U']--;nowy++;
				cout<<'U';	
			}
			else if((nowx!=mx||nowy-1!=my)&&mp['D']){
				mp['D']--;nowy--;
				cout<<'D';	
			}			
		}
		cout<<endl;
			return;
	} 
	
}
signed main() {
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t;
	cin>>t;
	while(t--) {
		solve();
	}
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3536kb

input:

5
1 1
RURULLD
0 5
UUU
0 3
UUU
0 2
UUU
0 0
UUU

output:

RRLLUUD
UUU
Impossible
Impossible
Impossible

result:

ok 5 cases

Test #2:

score: -100
Time Limit Exceeded

input:

11109
6 0
RUDUDR
2 0
URU
0 0
UDRU
0 0
R
-1 1
LDUUDDRUUL
-1 5
RRUUUDUUU
-8 4
RRDRLDR
2 0
UD
0 0
UUDD
3 -2
LDDLLLRR
3 -2
LDRURLDD
1 0
RRL
-1 0
DUDDLLRDU
-4 0
LL
-1 -1
DLRLDLUDUR
1 4
URDULUR
0 0
DDUUDUDDDD
0 2
UU
1 0
RRULD
0 -2
LDLRLLDRRL
0 1
RLRLLRLUR
-3 0
RL
0 0
D
0 0
L
0 0
DDLRRUDRUD
0 0
DULU
2 0
RR...

output:

RRUUDD
RUU
Impossible
Impossible
Impossible
RRUUUUUUD
RRRRLDD
UD
Impossible
RRLLLLDD
RRLLUDDD
Impossible

result: