这是一周周赛的一道题目,是其中最简单的。
当时一直卡在一道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;
}