题目链接 http://codeforces.com/problemset/problem/3/A
走过的格的值相乘后后缀的0最少,统计路径中中 2和5最少的数就行,有值0的话看另外判断,可能有路径后缀的0没有。
下面ac代码
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <string>
#include <map>
using namespace std;
typedef long long lld;
/*方向 R U L D RU RD LU LD
0 1 2 3 4 5 6 7
*/
int main()
{
char x1,x2;
int y1,y2;
int dir[8]={0};
while(cin>>x1>>y1>>x2>>y2)
{
memset(dir,0,sizeof(0));
int xcha=x2-x1;
int ycha=y2-y1;
if(xcha==0&&ycha==0)
cout<<0;
else if(xcha>=0&&ycha>=0)
{
int flag=0;
while(xcha>0&&ycha>0)
{
ycha--;
xcha--;
dir[4]++;
flag++;
}
while(xcha>0)
{
xcha--;
dir[0]++;
flag++;
}
while(ycha>0)
{
ycha--;
dir[1]++;
flag++;
}
cout<<flag<<endl;
}
else if(xcha<=0&&ycha<=0)
{
int flag=0;
while(xcha<0&&ycha<0)
{
ycha++;
xcha++;
dir[7]++;
flag++;
}
while(xcha<0)
{
xcha++;
dir[2]++;
flag++;
}
while(ycha<0)
{
ycha++;
dir[3]++;
flag++;
}
cout<<flag<<endl;
}
else if(xcha<=0&&ycha>=0)
{
int flag=0;
while(xcha<0&&ycha>0)
{
ycha--;
xcha++;
dir[6]++;
flag++;
}
while(xcha<0)
{
xcha++;
dir[2]++;
flag++;
}
while(ycha>0)
{
ycha--;
dir[1]++;
flag++;
}
cout<<flag<<endl;
}
else if(xcha>=0&&ycha<=0)
{
int flag=0;
while(xcha>0&&ycha<0)
{
ycha++;
xcha--;
dir[5]++;
flag++;
}
while(xcha>0)
{
xcha--;
dir[0]++;
flag++;
}
while(ycha<0)
{
ycha++;
dir[3]++;
flag++;
}
cout<<flag<<endl;
}
while(dir[0]--)
cout<<"R"<<endl;
while(dir[1]--)
cout<<"U"<<endl;
while(dir[2]--)
cout<<"L"<<endl;;
while(dir[3]--)
cout<<"D"<<endl;;
while(dir[4]--)
cout<<"RU"<<endl;;
while(dir[5]--)
cout<<"RD"<<endl;;
while(dir[6]--)
cout<<"LU"<<endl;;
while(dir[7]--)
cout<<"LD"<<endl;;
cout<<endl;
/*方向 R U L D RU RD LU LD
0 1 2 3 4 5 6 7
*/
}
return 0;
}