首页 > 代码库 > 220 DIV2 A. Inna and Pink Pony
220 DIV2 A. Inna and Pink Pony
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 #include<cstdio> 2 #include<cmath> 3 #include<cstdlib> 4 #include<cstring> 5 #include<queue> 6 #include<limits.h> 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 }
220 DIV2 A. Inna and Pink Pony
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。