ARC103D

题意

有k个点,从出发,求出一个行动字符串长度,并依次写出每次移动的距离,安排从而满足每个点都能被到达,否则输出-1

思路:本题是一个构造题,易发现如果绝对值移动距离的和有偶数和奇数两种情况,那么就一定无解,那么该如何构造?考虑到{1},{1,2},{1,2,4}这种情况,那么它们可以将在内的所有奇数情况构造出来,偶数的话,那么添加一个1即可,即{1,1},{1,1,2},{1,1,2,4}....诸如此类,那么就可以构造出答案了。

参考题解:
图片说明
代码:

#include<bits/stdc++.h>
using namespace std;
long n,x[1000],y[1000];
vector<long>d;
main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>x[i]>>y[i];
        if(abs(x[i])+abs(y[i])&1^abs(x[0])+abs(y[0])&1){
            cout<<-1<<endl;
            return 0;
        }
    }
    for(int i=31;i--;)d.push_back(1<<i);
    if(abs(x[0])+abs(y[0])&1^1)d.push_back(1);
    cout<<d.size()<<"\n";
    for(int i=0;i<d.size();i++)cout<<d[i]<<" ";
    cout << endl;
    for(int i=0;i<n;i++){
        long X=x[i],Y=y[i];
        string s=" ";
        for(int j=0;j<d.size();j++)s+=abs(X)>abs(Y)?X>0?X-=d[j],"R":(X+=d[j],"L"):Y>0?Y-=d[j],"U":(Y+=d[j],"D");
        cout<<s << endl;
    }
}
全部评论

相关推荐

迟缓的斜杠青年巴比Q了:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
04-06 16:59
已编辑
河南工业大学 Java
牛牛牛的牛子:最好扔了,实在没有选择的选择
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务