題目大意:給出n個點的座標,計算這些點的凸包的周長,但是還需要加上一些距離,因為它規定城牆必須離給定的點(城堡)一定得距離m.
思路:上面說的比較明白了,其實直接套用模板就好了,當然要加上的圓的距離只是乙個圓就好了,這個大家畫個圖就能夠發現,三角形,矩形,加上的都是乙個圓,這個是可以證明的,大家去找規律就好了。 我這裡是用模板算出了所有的點,然後再一條一條的算距離(模板裡沒有……)
ac **:
#include #include #include #include #include #include#include#include #include#define foreach(e,x) for(__typeof(x.begin()) e=x.begin();e!=x.end();++e)
#define rep(i,n) for(int i=0;ieps;
}struct point
point(double _x, double _y) :
x(_x), y(_y)
point operator+(const point&p) const
point operator-(const point&p) const
point operator*(double d) const
point operator/(double d) const
bool operator<(const point&p) const
double dot(const point&p) const
double det(const point&p) const
double alpha() const
double distto(const point&p) const
double alphato(const point&p) const
void read()
double abs()
double abs2()
void write()
};#define cross(p1,p2,p3) ((p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y))
#define crossop(p1,p2,p3) sign(cross(p1,p2,p3))
point isss(point p1, point p2, point q1, point q2) //可求p1,p2 直線與q1,q2的焦點。。不過不確定
vectorconvexhull(vectorps)
for (int i = n - 2, t = qs.size(); i >= 0; qs.push_back(ps[i--]))
qs.pop_back();
return qs;
}int main()
qs=convexhull(ps);
int l=qs.size();
double sum=0;
for(int i=0;i
POJ 1113 凸包周長
題意 國王想建乙個周長最短的城牆,使牆的任意一點到城牆的距離都 大於 rr。求這面牆的周長。題解 凸包 水平序graham掃瞄法 顯然答案就是 凸包的周長 半徑為rr的圓的周長 view code 1 include 2 include 3 include 4 include 5 include 6...
poj1113 求凸包 計算凸包周長
經典的求凸包題,模板題。要求用資源最少,那肯定這個多邊形是個凸多邊形,也就是凸包。所以先求出凸包,計算它的周長。還有就是這道題所說的,要離城牆l遠,其實就是在加上乙個圓的周長,圓的半徑就是l。都說到這了,這道題還差什麼?還差乙個經典的凸包模板!哈哈 如下 include include includ...
凸包計算 POJ1113
題目中除了要計算凸包之外,還要求修理的城牆要和宮殿之間的距離不小於l,那麼也就是相對於宮殿長度之外,多了乙個一l為半徑的圓的距離,所以題目就得以解決 poj1113 include include include include using namespace std typedef long lo...