把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

CF1294B Collecting Packages

题面传送门
给出\(n\)\(n\)个特殊点的坐标 \((x_i, y_i)\)
\((0, 0)\)出发, 只能向上和向右移动,求最优路径,或告知无解
首先最优化排序,使得其按\(x\)升序,\(x\)相同以\(y\)升序。排好后检查\(y\)是否全部升序,如果全部升序那么机器人一定可以到达,反之则不能。
那么从一个地点到另一个地点走曼哈顿距离,无论怎样都要横着走\(\left|y_i-y_j-1\right|\)步,竖着走\(\left|x_i-x_j-1\right|\)步。随便输就好了。
代码实现:

#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;
}
posted @ 2020-03-25 20:41  275307894a  阅读(45)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end