poj 1755 Triathlon 半平面交

2021-07-17 05:52:58 字數 2469 閱讀 8432

給出n個人,還有他們在鐵人三項中游泳、自行車和賽跑的速度,問通過合理設計三個比賽的長度,哪些人可能成為冠軍(不能是並列的)。

設行程總長度為1,其中游泳的長度為x,自行車的長度為y,則賽跑的長度為1-x-y,若i可能成為冠軍,則令f

(i)=

xv[i

]+yu

[i]+

1−x−

yw[i

],有f

(i)j)(j

≠i) 之後就是解不等式組了。

可以將速度同時擴大k倍。有乙個重要的剪枝就是如果j的各方面速度均》=i,那麼直接輸出no,或者是如果j的各方面速度均<=i,那麼不用考慮i-j不等式的半平面。

這樣做就是為了減少精度誤差導致wa,貌似後面的資料精度要求很高。

具體的做法好像有兩種:一種是計算半平面交之後剩下來的點數,還有一種是計算半平面交之後剩下凸包的面積,discuss裡說後一種方法精度要求極高。對於後一種方法,我還是需要加上剪枝才能ac。

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define all(x) (x).begin(), (x).end()

#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)

#define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++)

#define mes(a,x,s) memset(a,x,(s)*sizeof a[0])

#define mem(a,x) memset(a,x,sizeof a)

#define ysk(x) (1<<(x))

typedef long long ll;

typedef pair pii;

const int inf =0x3f3f3f3f;

const int maxn= 100 ;

const double pi=acos(-1.0);

const double eps=1e-10;

int dcmp(double x)

struct point

; bool operator ==(const point b)const

bool operator<(const point& b)const

};typedef point vector;

vector operator -(vector a,vector b)

double cross(vector a,vector b)//叉乘

double dot(vector a,vector b)//點乘

vector operator +(vector a,vector b)

vector operator *(vector a,double p)

vector operator /(vector a,double p)

vector operator -(vector a)

double length(vector a)

struct line

line(point a,vector v):p(a),v(v)//點線式

void twopointintial(point p,point p2)//兩點式

point point(double t)//引數方程求引數t對應點

bool operator<(const line & l)const

bool onright(line l,point p)

int halfplaneintersection(line* l,int n)

if(first}

while(firstif(last-first<=1) return

0;//小於3個,不存在

p[last]=getintersection(q[last],q[first]);

return

last-first+1;

}double v[maxn+3],u[maxn+3],w[maxn+3];

line l[maxn+6];

int main()

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

//printf("i=%d,j=%d\n",i,j);

// cout<" "

<" "

<<" "

<1].p.x

<<" "

<1].p.y

<<" "

<1].v.x

<<" "

<1].v.y

if(ok) puts("yes");

else puts("no");}}

return

0;}

POJ 1755 Triathlon 半平面交

看的這裡 題意 鐵人三項比賽,給出 個人進行每一項的速度vi,ui,wi 對每個人判斷,通過改變3項比賽的路程,是否能讓該人獲勝 嚴格獲勝 思路 題目實際上是給出了n個式子方程,ti ai x bi y ci z 0 i n 要判斷第i個人能否獲勝,即判斷不等式組 tj ti 0,0 j n j i...

POJ 1755 Triathlon(半平面交)

題意 一段距離總長度為l,將l分成三部分a,b和c a b c均大於0 有n 1 n 100 個人,第i個人在這三段中的速度分別是vi,ui和wi 1 vi,ui,wi 10000 問是否存在一種分法,使得第i個人可以成為冠軍 並列冠軍不算,也就是只有i乙個人是冠軍 思路 對於某種分法,第i個人用的...

LA2218 Triathlon 半平面交

首先三項比賽 二維空間 設全長為1 然後對v,u,w全大的,沒有要求,全小的,直接不可能。然後對應最多n 1 3個平面的半平面交。有對應區域的就有解 注意兩點1 ax by c 0 對應的line的v就是 b,a 2 可以適當擴大k 使得數值精確一些 保險起見 include include inc...