LA2218 Triathlon 半平面交

2021-06-21 23:57:45 字數 2588 閱讀 4569

首先三項比賽--二維空間--設全長為1 , 

然後對v,u,w全大的,沒有要求,全小的,直接不可能。

然後對應最多n-1+3個平面的半平面交。  有對應區域的就有解

注意兩點1  ax+by+c>0 對應的line的v就是(b,-a);

2   可以適當擴大k 使得數值精確一些 保險起見

**;#include#include#include#include#include#include#includeconst double inf=0x3fffffff;

const double eps=1e-10;

const double pi=acos(-1.0);

using namespace std;

struct point

};int dcmp(double x)

int sgn(double x)

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)

ostream &operator<<(ostream & out,point & p)

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

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

bool onsegment(point p,point a,point b)

bool segmentcommon(point a1,point a2,point b1,point b2)

return dcmp(c1)*dcmp(c2)<=0&&dcmp(c3)*dcmp(c4)<=0 ;

}double polygonarea(point *p,int n)

else

}// 向量極角公式

int getcirclecircleintersection(circle c1,circle c2,vector&sol)

if(dcmp(c1.r+c2.r-d)<0) return 0; // 外離

if(dcmp(fabs(c1.r-c2.r)-d)>0) return 0; // 內含

double a=angle(c2.c-c1.c);

double da=acos((c1.r*c1.r+d*d-c2.r*c2.r)/(2*c1.r*d));

point p1=c1.point(a-da);

point p2=c1.point(a+da);

sol.push_back(p1);

if(p1==p2) return 1; // 相切

else

}// 求點到圓的切線

int gettangents(point p,circle c,vector *v)

else

}// 求兩圓公切線

int gettangents(circle a,circle b,point *a,point *b)

return cnt;

}// 幾何演算法模板

int ispointinpolygon(point p,point * poly,int n)

if(wn!=0) return 1;

else return 0;

}bool segmentlineintersection(point a1,point a2,point b1,point b2) //a1,a2 是直線 規範相交

point ori(0,0);

struct segment

};bool onleft(line l,point p)

point getlineintersection(line a,line b) // 過載哪個版本嘛

bool linecmp(line a,line b)

// ax*by+c>0

double a=k/v[j]-k/w[j]-(k/v[i]-k/w[i]);

double b=k/u[j]-k/w[j]-(k/u[i]-k/w[i]);

double c=k/w[j]-k/w[i];

vector v(b,-a);

point p;

if(fabs(a)>fabs(b)) p=point(-c/a,0);

else p=point(0,-c/b);

l[lc++]=line(p,v);

}if(ok)

{l[lc++]=line(point(0,0),vector(0,-1));

l[lc++]=line(point(0,0),vector(1,0));

l[lc++]=line(point(0,1),vector(-1,1));

if(!halfplaneintersection(l, lc, poly))

{//cout<<"半無交"<

TYVJ 2218 最大矩陣

最近模擬賽略頻繁,導致部落格有點斷片,自己的計畫有點停滯不前,以此來督促一下自己。題目中說兩個矩陣不可以相交,那麼這兩個矩陣肯定就可以被一條線在原來的矩陣中分開,當然可能是橫線也可能是豎線。所以我們可以列舉這條分割線,最多列舉200次,這樣列舉的前提就是我們已經求出了分割線兩邊的大矩陣中的和最大的子...

codevs 2218 補丁vs錯誤(狀壓搜尋)

題目描述 description 錯誤就是人們所說的bug。使用者在使用軟體時總是希望其錯誤越少越好,最好是沒有錯誤的。但是推出乙個沒有錯誤的軟體幾乎不可能,所以很多軟體公司都在瘋狂地發放補丁 有時這種補丁甚至是收費的 t公司就是其中之一。上個月,t公司推出了乙個新的字處理軟體,隨後發放了一批補丁。...

搜尋專項 LA 5844

一開始用map記錄對映dfs,結果tle了。然後發現第乙個串中只會出現 a z 所以可以以這26個字母用乙個vis記錄該字母是否被對映,再記錄該字母對映下的字串就可以了。include include include using namespace std char s1 20 s2 60 int ...