LA 3263 尤拉定理

2022-08-09 09:09:09 字數 2389 閱讀 7333

#include#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 310

;const

int maxe = 100000

;const

int inf = 0x3f3f3f

;struct

point //

建構函式

};typedef point vector;

vector

operator + (vector a , vector b)

vector

operator - (vector a , vector b)

vector

operator * (vector a , double p)

vector

operator / (vector a , double p)

bool

operator

< (const point& a,const point&b)

const

double eps = 1e-10

;int dcmp(double

x)bool

operator == (const point& a, const point&b)

///向量(x,y)的極角用atan2(y,x);

double dot(vector a, vector b)

double length(vector a)

double angle(vector a, vector b)

double cross(vector a, vector b)

double area2(point a,point b,point c)

///向量的逆時針旋轉,rad 為旋轉的角;

vector rotate(vector a, double rad)

///特殊的,下面函式計算向量的單位法向量,即左旋90,在長度歸一化;

vector normal(vector a)

///直線用引數式 p = p'+ t * v;p'為直線上一點,v為方向向量;

///t不受限制,為直線,t>0 為射線, 0=

///推導暫時不會,下面計算直線p+tv和q+tw的交點。呼叫前先確保兩直線有唯一交點;即判定cross(v,w) 非0;

point getlineintersecion(point p, vector v,point q,vector w)

///求點到直線的距離,利用h*|ab| == ab(向量) * ap(向量);

double

distancetoline(point p,point a,point b)

///double

distancetosegment(point p,point a,point b)

///point getlineprojection(point p,point a,point b)

///判定線段是否規範相交;

bool

segmentproperintersection(point a1,point a2,point b1,point b2)

///如果允許在端點處相交:c1和c2都是0,表示兩線段共線;如果只有其中乙個為0,則一條線段的端點在另一條線段上;

///下面的**判斷乙個點p是否在一條線段ab上(不包括a,b點);

bool

onsegment(point p,point a,point b)

///多邊形

///求面積

double polygonarea(point* p,int

n)

return area/2;}

intmain()

n--;

int vcnt = n, ecnt =n;

for(int i=0;i)

for(int j=i+1;j)

}sort(v,v+vcnt); ///

排序等會好去重;

vcnt = unique(v,v+vcnt) - v; ///

求出不重複的點的個數;

for(int i=0;i)

for(int j=0;j)

if( onsegment(v[i],p[j],p[j+1

]) )

ecnt++;

printf(

"case %d: there are %d pieces.\n

",t++,ecnt+2-vcnt);

}return0;

}

view code

LA 3263 尤拉定理

include include includeusing namespace std const double eps 1e 10 int dcmp double x struct point typedef point vector vector operator const vector a,c...

LA 3263 計算幾何,尤拉定理

題目大意 有n個點組成的一筆畫,問這個圖形把平面分成了幾個部分 題目解析 先把那些直線相交得出的點算出來得出點數,再把 邊數算出來,有乙個點在原來的線段上並且不與端點重合邊數就加一,因為一條線段變成了兩條線段,最後根據尤拉定理f e 2 v算出面數 ac includeusing namespace...

LA 3263 細節處理,尤拉定理

大概就是給你若干個點描述乙個軌跡,這個軌跡的終點一定是和起點重合的 然後問你分成了幾個平面區域 這個問題用到了尤拉定理,妙啊!平面圖的尤拉定理 不得不說尤拉牛逼啊 e是稜的個數,其實可以理解成邊,f是區域的個數,這裡理解為邊劃分成的區域,e是頂點,也就是圖論中的頂點。至於什麼是平面圖,不解釋了 然後...