Codeforces 3A. Shortest path of the king(贪心:暴力)

这种傻逼题我居然一看就想着搜索做

然后又试了用DP做

毫无疑问这两种方法都是可以做的

但是直接贪心暴力更容易好么。。。

判断各种情况,答案恒为纵横坐标差的绝对值的较大者

代码如下:

/* ***********************************************
Author        : yinwoods
E-Mail        : yinwoods@163.com
Created Time  : 2014年12月19日 星期五 23时41分14秒
File Name     : 3A.cpp
************************************************ */

#include <vector>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAXN 10010
#define LL long long
using namespace std;

int main(void) {
    char str1[5], str2[5];
    scanf("%s%s", str1, str2);
    int x1 = str1[0]-'a'+1;
    int y1 = str1[1]-'0';

    int x2 = str2[0]-'a'+1;
    int y2 = str2[1]-'0';

    int detx = x1-x2;
    int dety = y1-y2;
    printf("%d\n", max(abs(detx), abs(dety)));
    if(abs(detx) == abs(dety)) {
        if(detx>0 && dety>0) {
            for(int i=0; i<detx; ++i)
                puts("LD");
        } else if(detx>0 && dety<0) {
            for(int i=0; i<detx; ++i)
                puts("LU");
        } else if(detx<0 && dety>0) {
            for(int i=0; i<dety; ++i)
                puts("RD");
        } else if(detx<0 && dety<0){
            for(int i=0; i<-detx; ++i)
                puts("RU");
        }
    }

    else if(detx==0 || dety==0) {
        if(detx == 0) {
            if(dety > 0) {
                for(int i=0; i<dety; ++i)
                    puts("D");
            } else {
                for(int i=0; i<abs(dety); ++i)
                    puts("U");
            }
        } else {
            if(detx > 0) {
                for(int i=0; i<detx; ++i)
                    puts("L");
            } else {
                for(int i=0; i<abs(detx); ++i)
                    puts("R");
            }
        }
    } else {
        int absx = abs(detx);
        int absy = abs(dety);
        int minv = min(absx, absy);

        int ans = absx+absy-minv;
        for(int i=0; i<minv; ++i) {
            if(detx>0 && dety>0)
                puts("LD");
            else if(detx>0 && dety<0)
                puts("LU");
            else if(detx<0 && dety>0)
                puts("RD");
            else puts("RU");
        }
        absx -= minv;
        absy -= minv;
        for(int i=0; i<ans-minv; ++i) {
            if(absx == 0) {
                if(dety > 0) puts("D");
                else puts("U");
            } else {
                if(detx > 0) puts("L");
                else puts("R");
            }
        }
    }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值