1. 程式人生 > 實用技巧 >gmoj 6835. 2020.10.31【NOIP提高A組】T1 小h 的幾何

gmoj 6835. 2020.10.31【NOIP提高A組】T1 小h 的幾何

題面連結:https://gmoj.net/senior/#main/show/6835

Description

Input

Output

Solution

這道題主要是找結論,找到結論就好做了

對於一個三角形,它的中點三角形的外接圓的圓心就是答案

如上圖的三角形中,顯然\(\triangle ABC \sim\triangle EFD\)

\(\triangle ABC\)的外心O為原點,\(\triangle EFD\)的外心為O'

\(O'=E+\underset{O'E}{\rightarrow}=\frac{B+C}{2}+\frac{\underset{OA}{\rightarrow}}{2}=\frac{A+B+C}{2}\)

然後對於每個點進行操作

其中對於一個點,它被選中的總方案數是\(\frac{(n-1)(n-2)}{2}\)

而算都不用算,在題面有寫,每個點被選中的概率是\(\frac{6}{n(n-1)(n-2)}\)

化簡一下就是該點的貢獻還要乘上\(\frac{3}{n}\)

時間複雜度\(O(n)\)

#include <cstdio>
#include <cmath>
#define pi 3.1415926535897932384626433832795
#define open(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
int n,i,m;
long double a,x,y;
int main()
{
    open("geometry");
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
        scanf("%d",&m);
        a=(m*pi)/(1.0*1e9);
        x+=cos(a)*3/(1.0*n);
        y+=sin(a)*3/(1.0*n);
    }
    printf("%.15Lf %.15Lf",x/2.0,y/2.0);
    return 0;
}