zoukankan      html  css  js  c++  java
  • A. Srdce and Triangle 几何题

    链接:https://www.nowcoder.com/acm/contest/104/A
    来源:牛客网

    题目描述


    Let  be a regualr triangle, and D is a point in the triangle. Given the angle of . Then let AD, CD and BD form a new triangle, what is the size of the three angles?
     
     
    #include<math.h>
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #define pi acos(-1.0)
    #define eps 1e-12
    using namespace std;
    struct point
    {
        double x,y;
        point(){}
        point(double x,double y)
        {
            this->x=x;
            this->y=y;
        }
    }o1,o2,jiao1,jiao2,p,pp,ppp;
    double xmult(point p1,point p2,point p0)
    {
        return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
    }
    double Distance(point p1,point p2)
    {
        return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
    }
    //点到直线的距离
    double disptoline(point p,point l1,point l2)
    {
        return fabs(xmult(p,l1,l2))/Distance(l1,l2);
    }
    //求两直线交点
    point intersection(point u1,point u2,point v1,point v2)
    {
        point ret=u1;
        double t=((u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x))
                 /((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x));
        ret.x+=(u2.x-u1.x)*t;
        ret.y+=(u2.y-u1.y)*t;
        return ret;
    }
     
    void intersection_line_circle(point c,double r,point l1,point l2,point& p1,point& p2)
    {
        point p=c;
        double t;
        p.x+=l1.y-l2.y;
        p.y+=l2.x-l1.x;
        p=intersection(p,c,l1,l2);
        t=sqrt(r*r-Distance(p,c)*Distance(p,c))/Distance(l1,l2);
        p1.x=p.x+(l2.x-l1.x)*t;
        p1.y=p.y+(l2.y-l1.y)*t;
        p2.x=p.x-(l2.x-l1.x)*t;
        p2.y=p.y-(l2.y-l1.y)*t;
    }
     
    void intersection_circle_circle(point c1,double r1,point c2,double r2,point& p1,point& p2)
    {
        point u,v;
        double t;
        t=(1+(r1*r1-r2*r2)/Distance(c1,c2)/Distance(c1,c2))/2;
        u.x=c1.x+(c2.x-c1.x)*t;
        u.y=c1.y+(c2.y-c1.y)*t;
        v.x=u.x+c1.y-c2.y;
        v.y=u.y-c1.x+c2.x;
        intersection_line_circle(c1,r1,u,v,p1,p2);
    }
    double c(double A,double B,double C)
    {
        return (A*A+B*B-C*C)/2.0/A/B;
    }
    int main()
    {
        p.x=0.0;
        p.y=0.0;
        pp.x=20.0;
        pp.y=0.0;
        ppp.x=10.0;
        ppp.y=10.0*tan(pi/3.0);
        double A1,A2,A3,r1,r2,A[3],ans[3];
        while(~scanf("%lf%lf%lf",&A1,&A2,&A3))
        {
            A1*=pi/180.0;
            A2*=pi/180.0;
            A1=(pi-A1)*2.0;
            A2=(pi-A2)*2.0;
            o1.x=10.0;
            o1.y=-10.0/tan(A1/2.0);
            r1=10.0/sin(A1/2.0);
            double len=10.0*tan(pi/3.0)+10.0/tan(A2/2.0);
            o2.x=len*cos(pi/6.0);
            o2.y=len*sin(pi/6.0);
            r2=10.0/sin(A2/2.0);
            intersection_circle_circle(o1,r1,o2,r2,jiao1,jiao2);
            if(Distance(jiao1,pp)<eps)swap(jiao1,jiao2);
            A[0]=Distance(jiao1,p);
            A[1]=Distance(jiao1,pp);
            A[2]=Distance(jiao1,ppp);
            sort(A,A+3);
            //printf("%.9lf %.9lf %.9lf
    ",A[0],A[1],A[2]);
            if(A[0]+A[1]>A[2])
            {
                ans[0]=acos(c(A[0],A[1],A[2]));
                ans[1]=acos(c(A[0],A[2],A[1]));
                ans[2]=acos(c(A[1],A[2],A[0]));
                sort(ans,ans+3);
                for(int i=0;i<3;i++)
                    printf("%.9f ",ans[i]/pi*180.0);
                printf("
    ");
            }
            else printf("-1 -1 -1
    ");
        }
         
    }

    日常学python

    while True:
        try:
            A=list(map(int,input().split()))
            A=sorted(A)
            print(A[0]-60,A[1]-60,A[2]-60)
        except EOFError:
            break
    str = "Line1-abcdef 
    Line2-abc 
    Line4-abcd";
    print str.split( );
    print str.split(' ', 1 );
     
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    开始几天的基本学习
    从这个博客开始我的机器学习深度学习之路
    剑指Offer:面试题3——二维数组中的查找(java实现)
    HIVE配置文件
    C++ 之旅:前言
    leetcode 349:两个数组的交集I
    python学习(三):matplotlib学习
    python学习(二):python基本语法
    Android环境搭建
    LeetCode:237
  • 原文地址:https://www.cnblogs.com/SuuT/p/8910540.html
Copyright © 2011-2022 走看看