Inna and Pink Pony
输入n,m,i,j,a,b
可以看成n行m列的矩阵,起点(i,j),每次移动(a,b),(-a,-b),(-a,b),(a,-b)
可移动到(1,m),(n,1),(n,m),(1,1)四个方向
如果可以移动到这四个点中的一个或多个。
输出到其中一个点的最短距离
如果不能输出 Poor Inna and pony!
input
5 7 1 3 2 2
output
2
input
5 5 2 3 1 1
Poor Inna and pony!
PS:开始想成BFS了,一看100万,肯定超时了。
还是思想题,注意:判断边界
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int n,m,i,j,a,b; 9 10 int check(int x,int y)11 {12 int fx,fy;13 14 if(x==i && y==j)15 return 0;16 if(i+a>n&&i-a<1 || j+b>m&&j-b<1)//边界17 return INT_MAX;18 fx=abs(x-i);19 fy=abs(y-j);20 if(fx%a!=0 || fy%b!=0)//同为整数步21 return INT_MAX;22 fx=fx/a;//得到步数23 fy=fy/b;//得到步数24 int fz;25 fz=abs(fx-fy);26 if(fz%2==0)//同奇同偶27 {28 fz=max(fx,fy);29 return fz;30 }31 else32 return INT_MAX;33 }34 int main()35 {36 while(~scanf("%d%d%d%d%d%d",&n,&m,&i,&j,&a,&b))37 {38 int count=INT_MAX;39 count=min(check(1,1),check(1,m));40 count=min(count,check(n,1));41 count=min(count,check(n,m));42 if(count==INT_MAX)43 printf("Poor Inna and pony!\n");44 else45 printf("%d\n",count);46 }47 return 0;48 }