牛客寒假算法基础集训营4 Applese 走方格(构造+分类讨论)

链接:https://ac.nowcoder.com/acm/contest/330/B
来源:牛客网
 

精通程序设计的 Applese 又写了一个游戏。

 

在这个游戏中,它位于一个 n 行 m 列的方阵中的左上角(坐标为(0, 0),行的序号为0∼n−1,列的序号为0∼m−1)。

 

现在它想不重复地走过所有格子(除了起点),最后回到左上角的一个方案。

 

每次只能往上下左右其中一个方向走一格。

输入描述:

仅一行两个整数 n 和 m,表示方阵的大小。保证大于1×1。

输出描述:

如果存在方案,则输出一行操作,包含"L"、"R"、"U"、"D",分别表示左、右、上、下。如果有多种方案,输出任意一种即可。
如果没有方案,则在一行中输出"-1"。

示例1

输入

复制

2 2

输出

复制

RDLU

示例2

输入

复制

2 3

输出

复制

RRDLLU

备注:

1≤n,m≤10

行n为偶数:

列m为偶数:

图片说明

注意   1行2列和2行1列的特殊情况

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f;
const int maxn=2e5+5;
int T,n,m;
int main() {
    scanf("%d%d",&n,&m);
    if(n==1&&m==2){
        puts("RL");
    }
    else if(n==2&&m==1){
        puts("DU");
    }
    else if(n==1||m==1){
        puts("-1");
    }
    else if(!(n&1)){
        putchar('R');
        for(int i=1;i<=n;i++){
            if(i&1)     
                for(int j=2;j<m;j++)       
                   putchar('R');
            else        
                for(int j=2;j<m;j++)         
                    putchar('L');
            if(i!=n)                                  
                putchar('D');
        }
        putchar('L');
        for(int j=1;j<n;j++)                          
            putchar('U');
    }
    else if(!(m&1)){
        putchar('D');
        for(int i=1;i<=m;i++){
            if(i&1)     
                for(int j=2;j<n;j++)    
                     putchar('D');
            else        
                for(int j=2;j<n;j++)     
                    putchar('U');
            if(i!=m)                    
                putchar('R');
        } 
        putchar('U');
        for(int i=1;i<m;i++)      
            putchar('L');
    }
    else puts("-1");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值