cf A. Inna and Pink Pony(思维题)
题目:http://codeforces.com/contest/374/problem/A
题意:求到达边界的最小步数。。
刚开始以为是 bfs,不过数据10^6太大了,肯定不是。。。
一个思维题,要注意超边界。。。
1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 const int INF=(1<<28); 7 int n,m,x,y,a,b; 8 9 int ok(int x1,int y1) 10 { 11 if(x1<0) x1=-x1; 12 if(y1<0) y1=-y1; 13 if(x1%a==0&&y1%b==0)//能恰好 到达边界 14 { 15 if((x1/a-y1/b)%2==0)//而且两个的差为偶数。。 16 { 17 if(x1/a>y1/b) 18 return x1/a; 19 else 20 return y1/b; 21 } 22 } 23 return INF; 24 } 25 int main() 26 { 27 int d[10]; 28 while(cin>>n>>m>>x>>y>>a>>b) 29 { 30 if((x==1&&y==m)||(x==n&&y==1)||(x==n&&y==m)||(x==1&&y==1)) 31 { 32 cout<<"0"<<endl; 33 continue; 34 } 35 if(a>=n||b>=m)//有可能一步就会越界。。 36 { 37 cout<<"Poor Inna and pony!"<<endl; 38 continue; 39 } 40 d[0]=ok(x-1,y-m); 41 d[1]=ok(x-n,y-1); 42 d[2]=ok(x-n,y-m); 43 d[3]=ok(x-1,y-1); 44 sort(d,d+4); 45 if(d[0]==INF) 46 cout<<"Poor Inna and pony!"<<endl; 47 else 48 cout<<d[0]<<endl; 49 } 50 return 0; 51 }