这是一周周赛的一道题目,是其中最简单的。
当时一直卡在一道dp上,没有时间做。这是一道数学题目。
a,b,c是三角形三条吧,m,n,k是三个整数,求
vcdjb3MmIzIwNTQwO7a8ysfT0MDtyv2ho9a7xdC2z3NpbiYjMjA1NDA7PC9wPgo8cD5zaW4mIzIwNTQwO8XQts+3vbeoysfI53NpbiBhPXNhPXNxcnQoMipiKmMpKigyKmIqYyktKGIqYiYjNDM7YypjLWEqYSkqKGIqYiYjNDM7YypjLWEqYSk7xdC2z8bkyse38cTcv6q4+brFvs1va6GjPC9wPgo8cD48YnI+CjwvcD4KPHA+tMvM4tK70KnI/b3Huq/K/baowO08YnI+CjwvcD4KPHA+tPrC66O6PC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">#include
还有人家的方法,根据三角形面积判断的。更容易理解。
三角形面积s=0.5*a*b*sinc;
s是否为有理数只和sinc有关,那么只用判断面积是否为有理数就行了、注意直角
#include#include #include 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; }