POJ 3808(幾何,二分)

2022-05-24 15:27:09 字數 1848 閱讀 9701

2015-04-13 21:52:25

思路:japan 2009 的題... (japan果然老喜歡幾何了...- -)

題意很精簡,在乙個三角形內嵌入三個圓,每個角對應乙個圓。已知三角形三個點的座標,求三個圓的半徑。

蒟蒻不會.. 看的紅書的思路...

※我們可以二分列舉乙個圓的半徑 r1,然後根據下圖,可以列出方程:

r1/tanα + r2/tanβ + sqrt((r1+r2)^2 - (r1-r2)^2) = ab

可以二分一下 r2 來求出 r2,同理可以求出 r3。然後把求出的 r2,r3 帶入類似的方程,

判斷其 > bc 還是 < bc,若小於說明r2,r3過小,r1應該縮小;若大於說明r2,r3過大,r1應該擴大。

當然有直接數學推出公式的方法... 蒟蒻還不會... 待補!~

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include

11 #include 12 #include 13

using

namespace

std;

1415

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

16#define rep(i,n) for(int i=0;i

17#define for(i,a,b) for(int i=(a);i<=(b);++i)

18#define getmid(l,r) ((l) + ((r) - (l)) / 2)

19#define mp(a,b) make_pair(a,b)

2021 typedef long

long

ll;22 typedef pairpii;

23const

int inf = (1

<< 30) - 1;24

const

double eps = 1e-12;25

const

double pi = acos(-1.0

);26

27double

x1,y1,x2,y2,x3,y3;

28double

ab,bc,ac,r1,r2,r3;

29double

a,b,c,tha,thb,thc;

3031

double dis(double a1,double b1,double a2,double

b2)34

35double sign(double

v)39

40void

pre()

4849

double f(double ra,double ta,double rb,double tb,double

l)52

53bool judge(double v)

61 r2 =l;

62 l = 0.0,r = 2000.0;63

while(sign(r - l) != 0

)68 r3 =l;

69if(sign(f(r2,thb,r3,thc,bc)) < 0) return

false;70

return

true;71

}7273int

main()

86 printf("

%.6f %.6f %.6f\n

",r1,r2,r3);87}

88return0;

89 }

POJ2002 Squares 計算幾何,二分

給定一堆點,求這些點裡哪些點可以構成正方形,題目給定n 1000,直接列舉四個點是肯定會超時的,因此要做一些優化。有公式,已知兩個點在正方形對角,分別是 x1,y1 和 x2,y2 那麼圍成正方形後另外兩個點 x3,y3 和 x4,y4 分別為 x3 x2 x2 y1 y3 x2 x2 x1 x4 ...

發財兔幾何 二分

題目描述 小明非常喜歡計算幾何,有一天他突發奇想,從x正半軸和y正半軸上分別選了n個點,他按照某種順序把兩邊的點一一對應連起來,構成了n個線段,其中要保證任意兩個線段是不相交的。後來小明又提出了q個問題,每個問題給出乙個點p x,y 我們想要知道op線段和多少小明連起來的那n個線段有交點。o為原點 ...

poj 3685 二分套二分

題意 給乙個n n 的矩陣,其中每個元素的大小為 i i 100000 i j j 100000 j i j 現在給n和m,求這個矩陣中第 m 大的元素是什麼。解析 發現上面那個式子是按照,每一列,從小到大遞增的。所以可以先二分設定乙個mi元素,然後按照每一列來二分統計比它小的元素有多少個。如果比它...