加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

HDU 3903 Trigonometric Function 2011 Multi-University Training Contest 7 - Host by ECNU

(2011-08-03 09:33:25)
标签:

hdu

3903

trigonometric

function

it

分类: 杂题
题目描述:
给你三角形的三条边和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)
{
    long long ans = sqrt(x * 1.0);
    return ans * ans == x;
}
int main()
{
    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");
    }
return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有