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\n",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("\n");
        }
        else printf("-1 -1 -1\n");
    }
     
}

日常学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 \nLine2-abc \nLine4-abcd";
print str.split( );
print str.split(' ', 1 );
 

猜你喜欢

转载自www.cnblogs.com/SuuT/p/8910540.html
今日推荐