这种傻逼题我居然一看就想着搜索做
然后又试了用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;
}