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 }

 

posted @ 2013-12-19 17:28  水门  阅读(334)  评论(0编辑  收藏  举报