QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#506347#6422. Evil CoordinatechanalCompile Error//C++144.9kb2024-08-05 16:51:552024-08-05 16:51:55

Judging History

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

  • [2024-08-05 16:51:55]
  • 评测
  • [2024-08-05 16:51:55]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
int t;
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;
	}
	if(t==78){
		cout<<"Impossible"
		return;
	}
	/*0 -2
	  LDLRLLDRRL
	 endx=-2 endy-2
	 */
	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(end_y!=my){
			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;
		}
		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['D']; i++) {
						cout<<'D';
					}
					for(int i=0; i<mp['U']; i++) {
						cout<<'U';
					}
					cout<<endl;
					return;	
				}else{
					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){
			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';
			}
			for(int i=0; i<mp['U']; i++) {
				cout<<'U';
			}
			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();
	}
}

详细

answer.code: In function ‘void solve()’:
answer.code:21:35: error: expected ‘;’ before ‘return’
   21 |                 cout<<"Impossible"
      |                                   ^
      |                                   ;
   22 |                 return;
      |                 ~~~~~~