P9840题解
题目大意
有一个 \(n \times n\) 的地图,每个格子里有一个袋鼠,要想让所有的袋鼠都到 \((a,b)\) 这个点。你有 \(4\) 种操作,分别为 U
,D
,L
,R
。分别可以让每只袋鼠都往上下左右移动,如果某只袋鼠越界了,也就是超出地图,则不移动。求操作序列。注意,操作序列长度不超过 \(3 \times (n-1)\)。
解题思路
一个简单的模拟。
我们可以把所有袋鼠都用操作到地图的四个角中的一个,看哪个离目标点近,就到那个点,这样就可以在限制内完成。
AC CODE
#include <bits/stdc++.h>
using namespace std;
int x,y;
int main(){
int n,a,b;
cin>>n>>a>>b;
string ans="";
if(a>n/2){
for(int i=1;i<=n-1;i++)cout<<"D";
x=n;
}else{
for(int i=1;i<=n-1;i++)cout<<"U";
x=1;
}
if(b>n/2){
y=n;
for(int i=1;i<=n-1;i++)cout<<"R";
}else{
y=1;
for(int i=1;i<=n-1;i++)cout<<"L";
}
if(x==1&&y==1){
for(int i=1;i<a;i++){
cout<<"D";
}
for(int i=1;i<b;i++)cout<<"R";
}
if(x==1&&y==n){
for(int i=1;i<a;i++){
cout<<"D";
}
for(int i=n;i>b;i--)cout<<"L";
}
if(x==n&&y==1){
for(int i=n;i>a;i--){
cout<<"U";
}
for(int i=1;i<b;i++)cout<<"R";
}
if(x==n&&y==n){
for(int i=n;i>a;i--){
cout<<"U";
}
for(int i=n;i>b;i--)cout<<"L";
}
return 0;
}