NYOJ 78 圈水池 (凸包問題)

2021-08-16 18:23:33 字數 1148 閱讀 1393

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度: 4

描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!(籬笆足夠多,並且長度可變) 輸入

第一行輸入的是n,代表用n組測試資料(1<=n<=10)

第二行輸入的是m,代表本組測試資料共有m個供水裝置(3<=m<=100)

接下來m行代表的是各個供水裝置的橫縱座標

輸出輸出各個籬笆經過各個供水裝置的座標點,並且按照x軸座標值從小到大輸出,如果x軸座標值相同,再安照y軸座標值從小到大輸出

樣例輸入

1

40 0

1 12 3

3 0

樣例輸出

0 0

2 33 0

凸包問題,這個問題並不是很難,前提是得理解,理解了以後會很容易就做出來

首先要會判斷點在有向線段左側或者右側的方法,這個判定方式是用叉乘的方法

若點p1(x1,y1),p2(x2,y2),p(x,y),那麼有p1p2=(x2-x1,y2-y1),p1p=(x-x1,y-y1);

所以他們的叉乘:(x2-x1)(y-y1)-(x-x1)(y2-y1)

當結果大於零時,點p在p1p2左側,小於零時p在p1p2右側,等於零時在直線上

#include#includeusing namespace std;

struct point

ans[100],p[100];

bool cmp(point p1,point p2)

ans[temp++]=p[i];

} int flag=temp;

for(i=m-1;i>=0;i--)

ans[temp++]=p[i];

} temp--;

sort(ans,ans+temp,cmp);

for(i=0;icout<} return 0;

}

NYOJ 78 圈水池(凸包基礎)

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

NYOJ 78 圈水池(簡單凸包)

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

圈水池 nyoj 78 凸包演算法

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