Cho
N đồng xu có bán kính lần lượt là các số thực dương r1.. rN.
Được đặt xung quanh một vòng tròn sao cho:
Mỗi
đồng xu tiếp xúc với 2 đồng xu đặt cạnh nó và tiếp xúc với vòng tròn.
Biết
được bán kính của từng đồng xu. Yêu cầu: Tìm bán kính vòng tròn
Input
Dòng
đầu ghi số nguyên dương N
Dòng
tiếp theo ghi N số ri ( 1 ≤ i ≤ N )
Output
Gồm
1 dòng duy nhất ghi bán kính hình tròn ( độ chính xác đến 3 chữ số sau dấu phẩy
)
Example
Input:
4
2 2 2 2
Output:
0.828
Giới hạn
1 ≤ N ≤ 10000
1 ≤ ri ≤ 100000====================================================
Code: LEM1.PAS
Ý tưởng chom chỉa trong quyển KC-BOOK
Gọi đồng xu là vòng tròn đi cho dễ heng :)))))
-Cho O là tâm cái vòng tròn nhỏ ở trong....R là bán kính của nó (cái chúng ta cần tìm)
-O1,O2,..On lần lượt là tâm của mấy cái vòng tròn xung quanh
R1,R2,....,Rn lần lượt là bán kính của các vòng tròn xung quanh....ok, ta đi phân tích cách giải:
vậy nhé: rõ ràng ta thấy:
gócO1OO2+gócO2OO3+gócO3OO4+gócO4OO5+góc O5OO6+gócO6OO1 =360 độ
** Mấu chốt vấn đề nằm ở cái biểu thức đấy:
Việc tính các góc khá dễ dàng thông qua định lí COSIN (góc trong tam giác thường, không phải tam giác đặc biệt nên phải sử dụng định lí COSIN hoy)
quên lí thuyết coi chỗ này nhé: định lí cosin
Ví dụ một cái coi chơi: chúng ta đi tính gócO1OO2, rõ ràng góc này thuộc tam giác O1OO2 có các cạnh như sau:
+ O1O2 = R1+R2 (2 cái số này có hết rồi)
+ OO1 = R1+R (ẩn R => đang tìm)
+ OO2 = R2+R (ẩn R => đang tìm)
rồi áp dụng định lí Cosin vô: (code tin học) == R thay bằng k rồi đó
v:=(sqr(r[1]+k)+sqr(r[2]+k)-sqr(r[1]+r[2]))/(2*(r[1]+k)*(r[2]+k)); (1)
v:=arccos(v); (2)
-------------
vậy nè: cái v trong (1) thật ra là cos của góc O1OO2 đó
cái v trong (2) chuyển cos thành radian
các góc còn lại tính tương tự như góc tính bên trên, ta còn lại ẩn R (biến k trên code)
Ta sử dụng chặt nhị phân tìm R thay vào cái biểu thức trên đầu hết coi có đúng không, nếu đúng thì in ra
xong rồi, có nhiêu đó đó, chúc các bác AC, em AC gòi
========================