codeforce 贪心1
走棋子到棋盘四个角,输出最小步数
codeforces
输入:m*n (棋盘 从1开始)
i j (当前位置)
a b (每次可以走 (i+a,j+b) (i+a,j-b) (i-a,j-b) (i-a,j+b) ) 这为一步
/************************************************* * * 画个图出来就可以了~~ * **************************************************/ #include<iostream> #include<cmath> int n,m,i,j,a,b; const int oo = 1000000000; using namespace std; int find(int x,int y) { if((x%a)||(y%b)) return oo; // position satisfied x=abs(x/a);y=abs(y/b); int k=x-y; // cout<< x << " " <<y<<" "<<k<<endl; if(k&1) return oo; // 奇偶不同,不在交叉线上, if(!k ) return y; // 正方形对角线 if((k<0)){ if((i>a)||(i+a<=n)) return y; //留一个单位,对角线交叉着跳 return oo; } if((k>0)&&((j>b)||(j+b<=m))) return x; return oo; } int main() { ios::sync_with_stdio(0); cin>>n>>m>>i>>j>>a>>b; int ans,t; ans=min(find(i-1,j-1),find(i-1,m-j)); t = min(find(n-i,j-1),find(n-i,m-j)); //cout<<find(n-i,m-j)<<" "<<t<<endl; ans=min(ans,t); if(ans==oo) cout<<"Poor Inna and pony!"<<endl; else cout<<ans<<endl; return 0; }