LEM1 - COIN

Tác giả: happyboy99x

Ngôn ngữ: C++

#include<cstdio>
#include<cmath>

const int N = 10000+5;
const double EPS = 1e-9;
double r[N];
int n;

inline double alpha(const double &a, const double &b, const double &c) {
	return acos((b*b+c*c-a*a)/(2*b*c));
}

int main() {
	scanf("%d",&n);for(int i=0;i<n;++i) scanf("%lf",r+i);
	double l = 0, h = 1e9;
	while(fabs(h-l) > EPS) {
		double r0 = (l+h)/2, angle = alpha(r[0]+r[n-1],r0+r[0],r0+r[n-1]);
		for(int i=1;i<n;++i) angle += alpha(r[i]+r[i-1],r0+r[i],r0+r[i-1]);
		if(angle < 2*M_PI) h = r0; else l = r0;
	}
	printf("%.3lf\n", (l+h)/2);
	return 0;
}

Download