题面传送门
给出
n
n
n与
n
n
n个特殊点的坐标
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi) 。
从
(
0
,
0
)
(0, 0)
(0,0)出发, 只能向上和向右移动,求最优路径,或告知无解
首先最优化排序,使得其按
x
x
x升序,
x
x
x相同以
y
y
y升序。排好后检查
y
y
y是否全部升序,如果全部升序那么机器人一定可以到达,反之则不能。
那么从一个地点到另一个地点走曼哈顿距离,无论怎样都要横着走
∣
y
i
−
y
j
−
1
∣
\left|y_i-y_j-1\right|
∣yi−yj−1∣步,竖着走
∣
x
i
−
x
j
−
1
∣
\left|x_i-x_j-1\right|
∣xi−xj−1∣步。随便输就好了。
代码实现:
#include<cstdio>
#include<algorithm>
using namespace std;
int t,n,ans,tot,pus,flag;
struct yyy{
int x,y;
}s[1039];
inline bool cmp(yyy a,yyy b){
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
int main(){
register int i,j;
scanf("%d",&t);
while(t--){
flag=0;
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d%d",&s[i].x,&s[i].y);
sort(s+1,s+n+1,cmp);
for(i=2;i<=n;i++) if(s[i].y<s[i-1].y) {flag=1;break;}
if(flag) printf("NO\n");
else{
printf("YES\n");
for(i=1;i<=n;i++){
for(j=1;j<=s[i].x-s[i-1].x;j++) putchar('R');
for(j=1;j<=s[i].y-s[i-1].y;j++) putchar('U');
}
printf("\n");
}
}
return 0;
}