這是一道非常坑的A題
今天我們機房的一大堆人一起做這題,然后這是其中幾個人的提交記錄(這只是一部分)
然后這是比賽的過題人數
接下來我們看看這道題
大意就是給出一個 n 行 ?m 列 的棋盤,要將放置在坐標點為(i, j)的 candy 移動到四個角落(1,1),(1,m),(n, 1),(n, m) 中的其中一個。
假設當前在位置(x, y),規定每次移動遵循,(x+a, y+b) 、 (x+a, y-b)、 (x-a, y+b)、(x-a, y-b)。求最小的移動次數。.
然后處理細節極多
求出 (i, j) 到每個角落的距離diff_x, diff_y,而且diff_x 必須要除得盡 a, diff_y除得盡 b,這個很好理解,次數嘛~~~
除此,除完之后這兩個值必須是同奇或同偶。還有就是移動的時候不能超出邊界,在邊界時的特判了~~~~
坑點:很多人可能都會死在樣例37,這個樣例比較特殊,就是某一維不需要移動,但另一維需要移動,但不需要移動的那維,若發生移動,則會越界。給個樣例如5 7 1 3 10 2,實際上是不能移動的,錯的人可能都會輸出2。
AC代碼
#include<bits/stdc++.h> using namespace std; int n,i,j,m,a,b,mn=1e7; int main() {scanf("%d%d%d%d%d%d",&n,&m,&i,&j,&a,&b);int t1=i-1,t2=j-1;if (t1%a==0&&t2%b==0&&(t1/a==t2/b||(abs((t1/a)-(t2/b))%2==0&&(((t1/a)||((n-t1-1)/a))&&((t2/b)||((m-t2-1)/b))))))if (max((t1/a),(t2/b))<mn)mn=max((t1/a),(t2/b));t1=i-1,t2=m-j;if (t1%a==0&&t2%b==0&&(t1/a==t2/b||(abs((t1/a)-(t2/b))%2==0&&(((t1/a)||((n-t1-1)/a))&&((t2/b)||((m-t2-1)/b))))))if (max((t1/a),(t2/b))<mn)mn=max((t1/a),(t2/b));t1=n-i,t2=j-1;if (t1%a==0&&t2%b==0&&(t1/a==t2/b||(abs((t1/a)-(t2/b))%2==0&&(((t1/a)||((n-t1-1)/a))&&((t2/b)||((m-t2-1)/b))))))if (max((t1/a),(t2/b))<mn)mn=max((t1/a),(t2/b));t1=n-i,t2=m-j;if (t1%a==0&&t2%b==0&&(t1/a==t2/b||(abs((t1/a)-(t2/b))%2==0&&(((t1/a)||((n-t1-1)/a))&&((t2/b)||((m-t2-1)/b))))))if (max((t1/a),(t2/b))<mn)mn=max((t1/a),(t2/b));if(mn!=1e7)printf("%d\n",mn);else puts("Poor Inna and pony!");return 0; }
?