题意

有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;
    }
}