題意:一段距離總長度為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個人用的時間ti=a/vi+b/ui+c/wi,第j個人用的時間tj=a/vj+b/uj+c/wj,那麼本題的要求就是對於i(1<=i<=n),是否有可能對於所有的j(1<=j<=n 且j!=i),滿足ti-tj<0?即(1/vi-1/vj)*a+(1/ui-1/uj)*b+(1/wi-1/wj)*c<0 。兩邊同時除以c得(令x=a/c,y=b/c,a=1/vi-1/vj,b=1/ui-1/uj,c=1/wi-1/wj):a*x+b*y+c<0。到此,可以看出,就是乙個半平面求交的問題。然後每個人用其他人交一下,求出最後的面積,大於0即可。我們注意到x=a/c>=0,y=b/c>=0(其實嚴格按照題意來說是大於0),x+y=(a+b)/c=(l-c)/c=l/c-1,因此初始化時必然是一頂點在原點且在第一象限的等腰三角形。至於這個等腰三角形的兩個腰長是多少為保險起見建議定的大一點,我是定的100000。
int db(double x)struct point
point(double _x,double _y)
void read()
void output()
point operator+(point a)
point operator-(point a)
double operator*(point a)
point operator*(double t)
point operator/(double t)
bool operator==(point a)
bool operator!=(point a)
};struct line
line(double _a,double _b,double _c)
line(point p,point q)
};point a[n];
int n;
//t在ab的左側返回正值
double cross(point a,point b,point t)
point getcross(point a,point b,point p,point q)
point getcross(line l1,line l2)
double getdist(point a,point b)
double getarea(point p,int n)
void movesegment(point &p1,point &p2,double r)
int m,v[n],u[n],w[n];
double cal(double a,double b,double c,point a)
void cut(point a,int &n,double a,double b,double c)
else if(t1>0&&!t2) a[n++]=b[i+1];
else if(t1>0&&t2<0) a[n++]=p,a[n++]=b[i+1];
else if(t1<0&&t2>0) a[n++]=b[i],a[n++]=p;
else if(!t1&&t2>0) a[n++]=b[i];
}m=1;
for1(i,n-1) if(a[i]!=a[i-1]) a[m++]=a[i];
if(a[m]==a[0]) m--;
n=m;
}int ok(int i,int j)
int main()
a=1.0/v[i]-1.0/v[j];
b=1.0/u[i]-1.0/u[j];
c=1.0/w[i]-1.0/w[j];
cut(a,n,a,b,c);
}if(!flag&&db(fabs(getarea(a,n)))) 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 半平面交
給出n個人,還有他們在鐵人三項中游泳 自行車和賽跑的速度,問通過合理設計三個比賽的長度,哪些人可能成為冠軍 不能是並列的 設行程總長度為1,其中游泳的長度為x,自行車的長度為y,則賽跑的長度為1 x y,若i可能成為冠軍,則令f i xv i yu i 1 x yw i 有f i j j i 之後就...
LA2218 Triathlon 半平面交
首先三項比賽 二維空間 設全長為1 然後對v,u,w全大的,沒有要求,全小的,直接不可能。然後對應最多n 1 3個平面的半平面交。有對應區域的就有解 注意兩點1 ax by c 0 對應的line的v就是 b,a 2 可以適當擴大k 使得數值精確一些 保險起見 include include inc...