zoukankan      html  css  js  c++  java
  • agc039 D

    重心:三条中线的交点,
    垂心:三条高的交点
    内心:三条角平分线的交点
    外心:三条垂直平分线的交点

    考虑一个圆上的三角形ABC,我们取这三段弧的中点,记为A' B' C'
    题解开始啦!『It can be proved here that』ABC的内心和A'B'C'的垂心是一样的
    题解又开始啦!『 it is known that』对于一个三角形,它的垂心、重心、外心在一条直线上,并且|垂心-重心|:|重心-外心| = 2:1
    然后我们其实要找的是A'B'C'的垂心,又A'B'C'的外心是(0,0),重心就是三点坐标的和除以3,所以垂心就是重心的坐标乘以三,也就是三点坐标的和了。

    那么我们枚举两个点,考虑第三个点的贡献
    不妨叫这两个点BC,显然A点在优弧上的时候,A'在劣弧上,反之亦然,
    那么将贡献乘以点的个数即可

    #include <bits/stdc++.h>
    #define yxn inline
    using namespace std;
    typedef double db;
    typedef long long ll;
    const db pi = acos(-1);
    int n,l;db t[3003],x,y;
    yxn void add(db rad,int cnt){
        x+=cos(rad)*cnt;
        y+=sin(rad)*cnt;
    }
    int main(){
        scanf("%d%d",&n,&l);
        for(int i=0;i<n;i++){
            scanf("%lf",&t[i]);
            t[i]=t[i]/l*2*pi;
        }
        sort(t,t+n);
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                db m1=(t[i]+t[j])/2,m2=m1+pi;
                add(m1,i+n-j-1);
                add(m2,j-i-1);
            }
        }
        db all = 1.0*n*(n-1)*(n-2)/6;
        x/=all,y/=all;
        printf("%.11f %.11f
    ",x,y);
    }
    
  • 相关阅读:
    order by子句
    having和where的区别
    O2O模式为什么这么火
    高德----------百度地图
    list后台转化为JSON的方法ajax
    ajax中后台string转json
    ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
    压缩文件解压
    个人作业3——个人总结(Alpha阶段)
    第08周-集合与泛型
  • 原文地址:https://www.cnblogs.com/MXang/p/11627611.html
Copyright © 2011-2022 走看看