hdu 3903 Trigonometric Function

来源:互联网 发布:网络统考英语怎么分ab 编辑:程序博客网 时间:2024/06/04 19:01

这是一周周赛的一道题目,是其中最简单的。

当时一直卡在一道dp上,没有时间做。这是一道数学题目。

a,b,c是三角形三条吧,m,n,k是三个整数,求是否为有理数。

看了一些三角函数的一些定理,三角形每个角cos值都是有理数。只判断sin值

sin值判断方法是如sin a=sa=sqrt(2*b*c)*(2*b*c)-(b*b+c*c-a*a)*(b*b+c*c-a*a);判断其是否能开根号就ok。


此题一些三角函数定理

代码:

#include <cstdio>#include <cmath>int main(){    int T;    scanf("%d",&T);    while(T--)    {        __int64 a,b,c,n,m,k;        scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&a,&b,&c,&n,&m,&k);        long long sa,sb,sc;        sa=(2*b*c)*(2*b*c)-(b*b+c*c-a*a)*(b*b+c*c-a*a);        sb=(2*a*c)*(2*a*c)-(a*a+c*c-b*b)*(a*a+c*c-b*b);        sc=(2*a*b)*(2*a*b)-(a*a+b*b-c*c)*(a*a+b*b-c*c);        long long la=sqrt(sa),lb=sqrt(sb),lc=sqrt(sc);        if(la*la==sa&&lb*lb==sb&&lc*lc==sc)            printf("YES\n");        else            printf("NO\n");    }    return 0;}

还有人家的方法,根据三角形面积判断的。更容易理解。

三角形面积s=0.5*a*b*sinc;

s是否为有理数只和sinc有关,那么只用判断面积是否为有理数就行了、注意直角

#include<stdio.h>#include<algorithm>#include<math.h>using namespace std;int a[3];bool judge(int tmp){    int t;    t=(int)sqrt(tmp*1.0);    if(t*t==tmp)        return true;    else        return false;}int main(){    int t,n,m,k,p,tmp;    scanf("%d",&t);    while(t--)    {        scanf("%d%d%d%d%d%d",&a[0],&a[1],&a[2],&n,&m,&k);        sort(a,a+3);        p=(a[0]+a[1]+a[2]);        if(p&1)        {            printf("NO\n");            continue;        }        p=p/2;        tmp=p*(p-a[0])*(p-a[1])*(p-a[2]);        if(judge(tmp))            printf("YES\n");        else        {            if(a[0]*a[0]+a[1]*a[1]==a[2]*a[2])                printf("YES\n");            else                printf("NO\n");        }    }    return 0;}


0 0
原创粉丝点击