HDU 3903 Trigonometric Function 2011 Multi-University Training Contest 7 - Host by ECNU
(2011-08-03 09:33:25)
标签:
hdu3903trigonometricfunctionit |
分类: 杂题 |
题目描述:
给你三角形的三条边和nmk三个整数,问你一个公式是否是有理数。
解题报告:
水题。
三角形每个角的cos值一定是有理数,不用管。
把分子拆开,成为cosnAcosmB - sinnAsinmB,按照n倍角公式,知道,分子分母可能不是有理数的只有sinA,sinB和sinC。
所以只需验证三个角的sin值是否是有理数。
sinA = sqrt( ((2*b*c)^2 - (b^2+c^2-a^2)^2) / (2 * b * c) ^ 2), 验证sqrt里面的分子是否能开根号即可。
代码如下:
long
long ans = sqrt(x * 1.0);
return
ans * ans == x;
int
t;scanf("%d", &t);
while(t--)
{
scanf("%I64d%I64d%I64d%I64d%I64d%I64d",
&a, &b, &c,
&n, &m, &k);
long long tmpa = S(2 * b * c)
- S(S(b) + S(c) - S(a));
long long tmpb = S(2 * a * c)
- S(S(a) + S(c) - S(b));
long long tmpc = S(2 * a * b)
- S(S(a) + S(b) - S(c));
if (judge(tmpa)
&& judge(tmpb)
&& judge(tmpc))
printf("YES\n");
else printf("NO\n");
}
给你三角形的三条边和nmk三个整数,问你一个公式是否是有理数。
解题报告:
水题。
三角形每个角的cos值一定是有理数,不用管。
把分子拆开,成为cosnAcosmB - sinnAsinmB,按照n倍角公式,知道,分子分母可能不是有理数的只有sinA,sinB和sinC。
所以只需验证三个角的sin值是否是有理数。
sinA = sqrt( ((2*b*c)^2 - (b^2+c^2-a^2)^2) / (2 * b * c) ^ 2), 验证sqrt里面的分子是否能开根号即可。
代码如下:
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
long long a, b, c, n, m, k;
long long S(long long x){return x * x;}
bool judge(long long x)
{
}
int main()
{
return 0;
}