nyoj 78 圈水池 凸包問題 籬笆問題

2021-06-13 23:09:04 字數 735 閱讀 4494

address:

題目中文題目,很容易懂。有一點比較關鍵。

輸出各個籬笆經過各個供水裝置的座標點, 從這句話可以得到,如果3點共線,那麼這3個點都要輸出。

在叉積函式中  return (sp.x-op.x)*(ep.y-op.y)>(sp.y-op.y)*(ep.x-op.x);     即可解決。

凸包 中的叉積  return (sp.x-op.x)*(ep.y-op.y)>=(sp.y-op.y)*(ep.x-op.x);   在一條直線上的點取兩頭的,中間的不要。

就這點注意下,這道題就很簡單了。直接套用凸包即可解決。

#include#include#includeusing namespace std;

struct point

pnt[105],res[105];

bool cmp(const point &p1,const point &p2)

int graham(point pnt,int n,point res)

return top;

}int main()

{ int n,m;

cin>>n;

while(n--)

{ cin>>m;

int i,j;

for(i=0;i>pnt[i].x>>pnt[i].y;

j=graham(pnt,m,res);

sort(res,res+j,cmp);

for(i=0;i

NYOJ 78 圈水池 (凸包問題)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!籬笆足夠多,並且長度可變 輸入 第一行...

NYOJ 78 圈水池(凸包基礎)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!籬笆足夠多,並且長度可變 輸入第一行輸...

NYOJ 78 圈水池(簡單凸包)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!籬笆足夠多,並且長度可變 輸入第一行輸...