BZOJ 2433 智慧型車比賽(計算幾何 最短路)

2021-09-08 20:36:58 字數 757 閱讀 4400

題意:若干個矩形排成一排(同乙個x之上最多有乙個矩形),矩形i和i+1相鄰。給定兩點s和t,兩點均在矩形內。求s到t的最短路徑。只能在矩形內部走。

思路:首先,s到t若有轉彎,必定是在矩形 的頂點處轉彎。因此,只要建立任意兩可達頂點(包含s和t)之間距離求最短路即可。若暴力列舉任意兩點再判是否可達複雜度o(n^3)。優化。列舉起點 a,從左向右掃遍矩形,利用叉積維護關於該點a的上下界,在該範圍之內的點均可達。

struct point

point(int _x,int _y)

void get()

point operator-(point a)

i64 operator*(point a)

double len()

};struct node

int contain(point p)

};double f[n],v,ans;

node a[n];

point s,t;

int n;

double dis(point a,point b)

i64 cross(point a,point b,point c)

int iscross(point a,point b,point c,point d)

void update(point s,int now,double p)

}else}}

}int main()

pr(ans/v);

}

智慧型車比賽

noi2011 智慧型車比賽 program car const inf 1e49 type node record x,y longint end operator a node b node c node begin c.x a.x b.x c.y a.y b.y end operator a ...

DP NOI2011 智慧型車比賽

新一屆智慧型車大賽在jl大學開始啦!比賽賽道可以看作是由n個矩形區域拼接而成 如下圖所示 每個矩形的邊都平行於座標軸,第i個矩形區域的左下角和右上角座標分別為 xi,1,yi,1 和 xi,2,yi,2 題目保證 xi,1 輸入的第一行包含乙個正整數n,表示組成賽道的矩形個數。接下來n行描述這些矩形...

Noi2011 智慧型車比賽

假設s在t左邊,那麼只能往右或者上下走 f i 表示s到i點的最短路 f i min f j dis i,j i能看到j 判斷i能看到j就維護乙個上凸殼和乙個下凸殼 時間複雜度 o n 2 寫的有點長 include include include define n 2010 using names...