• Codeforces 1294B


    题目大意:

    机器人从(0,0)开始,他只能往上'U'或者往右'R'走

    坐标系中有着很多包裹,分别在一些点上

    机器人需要走过去把这些包裹全部收集起来

    问能不能做到

    如果能,再输出移动方式,相同移动方式输出字典序最小的方案

    解题思路:

    pair或者结构体排序,x与y的优先级任意,因为下一个包裹必定在当前机器人位置右方/上方/右上方

    否则直接输出NO,表示不可能存在这种移动方式

    在输出移动方式时,注意能先用'R'就用'R',因为'U'的字典序比'R'大(即先右再上)

    按照上述模拟即可

    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> P;
    P pnt[1050];//使用pair默认先x再y
    string ans;
    void add(int up,int right){
        int i;
        for(i=0;i<right;i++)
            ans+="R";
        for(i=0;i<up;i++)
            ans+="U";
    }//先R再U
    void solve(){
        int n,i;
        ans="";
        cin>>n;
        pnt[0]=P(0,0);
        for(i=1;i<=n;i++)
            cin>>pnt[i].first>>pnt[i].second;
        sort(pnt+1,pnt+1+n);
        for(i=1;i<=n;i++){
            if(pnt[i].first>pnt[i-1].first&&pnt[i].second<pnt[i-1].second){//如果下一个点x比当前点大,而y比当前点小,明显不存在
                cout<<"NO
    ";
                return;
            }
            add(pnt[i].second-pnt[i-1].second,pnt[i].first-pnt[i-1].first);
        }
        cout<<"YES
    "<<ans<<'
    ';
    }
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);cout.tie(0);
        int T;cin>>T;
        while(T--)
            solve();
        
        return 0;
    }
  • 相关阅读:
    Echarts框架的使用
    变身windows达人,用运行命令直接启动所有应用程序
    Google为何这么屌
    骗子利用淘宝支付宝退款欺诈
    卡常技巧
    C++set用法
    分块大法好
    高精度乘法
    phpstudy初谈(基础教程)
    读入,输出优化
  • 原文地址:https://www.cnblogs.com/stelayuri/p/12230006.html
Copyright © 2020-2023  润新知