奇妙 ad-hoc

· · 题解

奇妙 ad-hoc。

如果 k\leq\dfrac n2,那么我们执行 k-1LDRU 操作可以把 k 顶到中间上面,再执行一次 L 操作可以把 k 挪到最左边。

如果 k>\dfrac n2,那么我们和 <\dfrac n2 类似的方法可以把 k 挪到最右边,再执行 nRDRU 操作可以把所有元素挪到最右边一坨。k 还是在右上角,我们通过一次 LU 操作可以把 k 挪到中间,也就变成了 k=\dfrac n2 的情况,套用上面的做法即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MP make_pair
mt19937 rnd(time(0));
int main(){
    ios::sync_with_stdio(false);
    int n,k;cin>>n>>k;
    if(k<n/2){
        for(int i=1;i<k;i++) cout<<"LDRU";
        cout<<"L"<<endl;
    }else if(k==n/2){
        cout<<"DL"<<endl;
    }else{
        for(int i=1;i<=n-k;i++) cout<<"RDLU";
        cout<<"R";
        for(int i=1;i<=n;i++) cout<<"RDRU";
        cout<<"LU";
        for(int i=1;i<n/2;i++) cout<<"LDRU";
        cout<<"L"<<endl;
    }
}