時間限制:
3000 ms | 記憶體限制:65535 kb
難度:4
描述
有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!(籬笆足夠多,並且長度可變)
輸入第一行輸入的是n,代表用n組測試資料(1<=n<=10)
第二行輸入的是m,代表本組測試資料共有m個供水裝置(3<=m<=100)
接下來m行代表的是各個供水裝置的橫縱座標
輸出輸出各個籬笆經過各個供水裝置的座標點,並且按照x軸座標值從小到大輸出,如果x軸座標值相同,再安照y軸座標值從小到大輸出
樣例輸入
140 0
1 12 3
3 0
樣例輸出
0 02 33 0
題解:用到了差積的特性,如果差積為負就是順時針轉,如果為正就是逆時針,如果為0就是共線;
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;
7struct
node
13};
14int
chaji(node a,node b,node c)
17 node a[110],ans[110
];18
intmain()
30int t=k;
31for(int i=m-1;i>=0;i--)
35 k--;
36 sort(ans,ans+k);
37for(int i=0;i"
%d %d\n
",ans[i].x,ans[i].y);38}
39return0;
40 }
另一種寫法:
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;
7struct
point
10};
11typedef point vector;
12bool
operator
<(vector a,vector b)
15 vector operator - (point a,point b)
16double
cross(vector a,vector b)
19 point a[110],ans[110
];20
intmain()
32int t=k;
33for(int i=m-1;i>=0;i--)
37 k--;
38 sort(ans,ans+k);
39for(int i=0;i"
%.0lf %.0lf\n
",ans[i].x,ans[i].y);40}
41return0;
42 }
圈水池(凸包入門)
描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!籬笆足夠多,並且長度可變 輸入 第一行輸入的是n,代表用n組測試資料 1 n 10 第二行輸入的是m,代...
凸包問題 圈水池 nyist 78
include include include using namespace std struct point int cmp1 point a,point b 按y排序 int cmp2 point a,point b 按x排序 此處是大於號 int graham point pnt,int n...
NYOJ 78 圈水池(凸包基礎)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!籬笆足夠多,並且長度可變 輸入第一行輸...