题解 AT5618 【[AGC039D] Incenters】
“在这里,你甚至可以学习平面几何”
比赛的时候这个题我似乎用三角函数的技巧硬推出来一个不知道对不对的式子,然后没实现完...... 然后发现标准做法完全不是这样)
定理1 : 如图,A,B,C 在\odot O 上,在\triangle ABC 中,作\angle BAC,\angle ACB,\angle CBA 的平分线,分别交\odot O 于F,D,E ,并且三条角平分线交于一点I ,则I 是\triangle DEF 的垂心。
证:
证毕。
有了这个结论之后,我们就可以把求内心转化成求另一个三角形的垂心了。而垂心的位置可以通过重心来转化计算:
定理2 (欧拉线):如图,A,B,C 在\odot O 上,D,E,F 分别为AB,BC,CA 中点,G,H 分别为\triangle ABC 的重心、垂心,连OH ,则有G 在OH 上,且GH=2OG 。
证:
证毕。那么由这个结论,我们有
在这题中,圆心
然后随便做做就好啦!
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#define pi 3.14159265358979323846
using namespace std;
typedef long long ll;
typedef long double ld;
const int MAXN = 3005;
int n,L;
ld t[MAXN],pre[2][2][MAXN][MAXN];
int main()
{
cin >> n >> L;
for(int i = 1; i<=n; i++)
cin >> t[i];
ld ansx = 0, ansy = 0;
for(int i = 1; i<=n; i++)
for(int j = i+1; j<=n; j++)
{
int cnt = j-i-1;
ld tmp = pi*(t[i]+t[j])/L;
ansx += cos(tmp)*(n-2*cnt-2), ansy += sin(tmp)*(n-2*cnt-2);
}
ansx /= 1ll*n*(n-1)*(n-2)/6;
ansy /= 1ll*n*(n-1)*(n-2)/6;
printf("%.12lf %.12lf\n",(double)ansx,(double)ansy);
return 0;
}