POJ 3348 Cows 凸包裸題

2021-09-11 16:19:52 字數 1216 閱讀 9044

給出n個點,求乙個凸包,然後將凸包面積除以50,下取整就是答案。

直接用安德魯演算法求出凸包 (求出上下凸殼),然後再求多邊形面積即可。主要是用來試板子的。

#include #include #include #include #include #include #define rep(i,a,b) for(int i = a; i <= b; i++)

#define cross(p1,p2,p3) ((p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y)) //向量(p1,p2)與(p1,p3)叉乘

#define crossop(p1,p2,p3) sign(cross(p1,p2,p3)) //判斷正負,順時針為負

using namespace std;

//實數比較

typedef double db;

const db eps = 1e-9;

inline int sign(db a) //返回-1表示a < 0, 1表示a > 0, 0表示a = 0

inline int cmp(db a, db b) //返回-1表示a < b, 1表示a > b,0表示 a==b

//點類

struct p

p(db _x, db _y) : x(_x), y(_y) {}

p operator+(p p) ; }

p operator-(p p) ; }

p operator*(db d) ; }

p operator/(db d) ; }

db dot(p p) //點積

db det(p p) //叉積

p rot(db an) ; } //旋轉

int quad() const //判斷該點是否在x軸上方或x軸上

bool operator<(p p) const

bool operator==(p p) const

};db area(vectorps)

vectorconvexhull(vectorps)

int main()

ld = convexhull(ld);

db ans = area(ld);

int num = floor(ans/50);

printf("%d\n",num);

return 0;

}

POJ 3348 Cows 凸包模板題

題目 給幾個點,用繩子圈出最大的面積養牛,輸出最大面積 50 題解 graham凸包演算法的模板題 下面給出做法 1.選出x座標最小 相同情況y最小 的點作為極點 顯然他一定在凸包上 2.其他點進行極角排序 極角指從座標軸的某一方向逆時針旋轉到向量的角度 極角一樣按距離從近到遠 可以用叉積實現 3....

POJ 3348 Cows 凸包面積

題意 求凸包面積 50,取整 include include include include include include include using namespace std double eps 1e 12 struct cpoint double x mult cpoint a,cpoin...

POJ3348 Cows 求凸包面積

題意 求給定的n個座標形成的凸包面積 套公式即可。從而引入凸包 思路 本題利用叉乘求面積 選取凸包上的乙個點作為基點,然後把多邊形分成許多的三角形,然後用叉積去算三角形面積即可 求解凸包用到的是andrew演算法,graham演算法的變種,速度更快穩定性也更好。兩種演算法的複雜度均為o nlogn ...