在西洋棋和中國象棋中,馬的移動規則相同,都是走「日」字,我們將這種移動方式稱為馬步移動。如圖所示,從標號為 0 的點出發,可以經過一步馬步移動達到標號為 1 的點,經過兩步馬步移動達到標號為 2 的點。任給平面上的兩點 p 和 s ,它們的座標分別為 (xp,yp) 和 (xs,ys) ,其中,xp,yp,xs,ys 均為整數。從 (xp,yp) 出發經過一步馬步移動可以達到 (xp+1,yp+2)、(xp+2,yp+1)、(xp+1,yp-2)、(xp+2,yp-1)、(xp-1,yp+2)、(xp-2,yp+1)、(xp-1,yp-2)、(xp-2,yp-1)。假設棋盤充分大,並且座標可以為負數。現在請你求出從點 p 到點 s 至少需要經過多少次馬步移動?
只包含4個整數,它們彼此用空格隔開,分別為xp,yp,xs,ys。並且它們的都小於10000000。
含乙個整數,表示從點p到點s至少需要經過的馬步移動次數。
1 2 7 9
5正解:貪心+廣搜。
這種無語題也是醉了。。
我們當兩個點距離很遠的時候我們可以直接貪心地移動起點,使得兩點距離縮小到能夠搜尋的範圍內。
然後再跑廣搜,兩次移動的距離和就是答案。
1//it is made by wfj_2048~
2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include
13#define inf (1<<30)
14#define il inline
15#define rg register
16#define ll long long
17#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
1819
using
namespace
std;
2021
const
int d1[8]=;
22const
int d2[8]=;
2324
int qx[10010],qy[10010],dis[110][110],vis[110][110
],x,y,sx,sy,tx,ty,ans;
2526 il int
gi()
3334 il void
bfs()44}
45return;46
}4748 il void
work()
54 x+=50,y+=50,bfs(); printf("
%d\n
",ans+dis[50][50]); return;55
}5657int
main()
狡猾的商人 bzoj1202,HNOI2005
ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...
BZOJ 1193 馬步距離
time limit 10 sec memory limit 162 mb submit 2267 solved 1026 submit status discuss 在西洋棋和中國象棋中,馬的移動規則相同,都是走 日 字,我們將這種移動方式稱為馬步移動。如圖所示,從標號為 0 的點出發,可以經過一...
BZOJ 1193 馬步距離(貪心 亂搞)
題意 給出平面上兩個位置a和b。每次跳馬步就是日字,從a到b最少要多少步?思路 若ab之間的距離小於等於10則直接爆搜。否則,a每次向b方向移動。這裡,若a移動某兩個方向後與b的距離相等,不妨設xy方向的距離分別為detx,dety,即detx dety相等,那麼接著比較abs detx dety ...