bzoj1193 HNOI2006 馬步距離

2022-05-02 04:39:06 字數 1430 閱讀 9255

在西洋棋和中國象棋中,馬的移動規則相同,都是走「日」字,我們將這種移動方式稱為馬步移動。如圖所示,從標號為 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 ...