QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#506240 | #6422. Evil Coordinate | chanal | WA | 0ms | 3476kb | C++14 | 4.3kb | 2024-08-05 16:12:35 | 2024-08-05 16:12:36 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
void solve() {
int mx,my;
cin>>mx>>my;
string str;
cin>>str;
map<char,int> mp;
for(int i=0; i<(int)str.size(); i++) {
mp[str[i]]++;//统计各个方向移动的指令数目
}
int end_x=mp['R']-mp['L'];//不要取绝对值就是算最后的坐标
int end_y=mp['U']-mp['D'];
if((mx==0&&my==0)||(end_x==mx&&end_y==my)) {
cout<<"Impossible"<<endl;
return;
}
//0 5 UUU
//endx=0 endy=5
if(my==0) { //地雷在x轴上
//最后落在x轴上,在这种情况下必然不会出现mx=0,那么就应该讨论mx和endx的关系以及end_y之间的关系
if(mp['U']==0&&mp['D']==0) { //如果都等于0这种情况说明只能左右移动那么只需要反方向移动即可
if(mx>0&&end_x>mx) {
cout<<"Impossible"<<endl;
return;
} else if(mx<0&&end_x<mx) {
cout<<"Impossible"<<endl;
return;
} else {
if(mx>0) {
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
cout<<endl;
return;
}else{
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
cout<<endl;
return;
}
}
} else if((mp['U']!=0)&&end_x!=mx) {
for(int i=0; i<mp['U']; i++) {
cout<<'U';
}
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
for(int i=0; i<mp['D']; i++) {
cout<<'D';
}
cout<<endl;
return;
} else if(mp['D']!=0&&end_x!=mx) {
for(int i=0; i<mp['D']; i++) {
cout<<'D';
}
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
for(int i=0; i<mp['U']; i++) {
cout<<'U';
}
cout<<endl;
return;
} else {
cout<<"Impossible"<<endl;
return;
}
} else if(mx==0) { //如果地雷在y轴上
if(mp['L']==0&&mp['R']==0) { //如果都等于0这种情况说明只能左右移动那么只需要反方向移动即可
if(my>0&&end_y>my) {
cout<<"Impossible"<<endl;
return;
} else if(my<0&&end_y<my) {
cout<<"Impossible"<<endl;
return;
} else {
if(my>0){
for(int i=0; i<mp['L']; i++) {
cout<<'D';
}
for(int i=0; i<mp['R']; i++) {
cout<<'U';
}
cout<<endl;
return;
}else{
for(int i=0; i<mp['L']; i++) {
cout<<'U';
}
for(int i=0; i<mp['R']; i++) {
cout<<'D';
}
cout<<endl;
return;
}
}
} else if((mp['L']!=0)&&end_x!=mx) {
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
for(int i=0; i<mp['U']; i++) {
cout<<'U';
}
for(int i=0; i<mp['D']; i++) {
cout<<'D';
}
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
cout<<endl;
return;
} else if(mp['R']!=0&&end_x!=mx) {
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
for(int i=0; i<mp['U']; i++) {
cout<<'U';
}
for(int i=0; i<mp['D']; i++) {
cout<<'D';
}
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
cout<<endl;
return;
} else {
cout<<"Impossible"<<endl;
return;
}
} else if(end_x!=mx&&end_y!=my) { //如果两个最终的结果都不跟坐标相同
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
for(int i=0; i<mp['U']; i++) {
cout<<'U';
}
for(int i=0; i<mp['D']; i++) {
cout<<'D';
}
cout<<endl;
return;
} else if(end_x!=mx&&end_y==my) {//若x不相同,但是y的坐标相同的话__地雷的点不在坐标轴上,但是在
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
for(int i=0; i<mp['U']; i++) {
cout<<'U';
}
for(int i=0; i<mp['D']; i++) {
cout<<'D';
}
cout<<endl;
return;
} else if(end_y!=my&&end_x==mx) { //如果y最后不相同但是x相同,
for(int i=0; i<mp['U']; i++) {
cout<<'U';
}
for(int i=0; i<mp['D']; i++) {
cout<<'D';
}
for(int i=0; i<mp['L']; i++) {
cout<<'L';
}
for(int i=0; i<mp['R']; i++) {
cout<<'R';
}
cout<<endl;
return;
}
}
int main() {
int t;
cin>>t;
while(t--) {
solve();
}
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3476kb
input:
5 1 1 RURULLD 0 5 UUU 0 3 UUU 0 2 UUU 0 0 UUU
output:
LLRRUUD Impossible Impossible Impossible
result:
wrong answer Line "" doesn't correspond to pattern "[UDLR]{1,100000}|Impossible"