SSL2684 2017年8月12日提高组T3 YMW的三角形(math)

2017年8月12日提高组T3 YMW的三角形

Description

YMW终于思考完数学题了,因为数学给人力量,所以他现在浑身都充满了力量。然而lyy俯视YMW,不屑地说道,你小学数学题都不会做,还在这嚣张?你看我们的电脑屏幕,可以是一个二维直角坐标系,你把手上那把三角板放在屏幕上,现在你告诉我它的每个顶点能否都在整数点上吗?(整数点:一个点,它的x和y坐标都为整数)

Input

多组数据,每组数据三个数表示三角形的三条边
输入以文件结束结尾

Output

对于每组数据,如果可以则输出Yes,不可以则输出No

分析:暴力枚举,以 a 为半径做第一象限的 1/4 圆, 以 b 为半径做一、四象限的半圆,存储整数点的解,暴力枚举 a 整数点与 b 整数点是否构成长度为 c 的边。

代码

#include <cstdio>
#include <cmath>
#define maxn 10000
using namespace std;

struct arr
{
    long long x,y;
}a[maxn],b[maxn];
int xx,yy,zz,l1,l2;

int main()
{
    while (~scanf("%d%d%d",&xx,&yy,&zz))
    {
        int o;
        if (xx>yy) {o=xx;xx=yy;yy=o;}
        if (yy>zz) {o=yy;yy=zz;zz=o;}
        for (int i=0;i<=xx;i++)
        {
            double a1=sqrt((xx*1.0)*(xx*1.0)-(i*1.0)*(i*1.0));
            if (a1-(int)a1<1e-6) 
            {
                int a2=(int)a1;
                a[++l1].x=i;
                a[l1].y=a2;
            }
        }
        for (int i=0;i<=yy;i++)
        {
            double a1=sqrt((yy*1.0)*(yy*1.0)-(i*1.0)*(i*1.0));
            if (a1-(int)a1<1e-6) 
            {
                int a2=(int)a1;
                b[++l2].x=i;
                b[l2].y=a2;
                b[++l2].x=i;
                b[l2].y=-a2;
            }
        }
        bool fl=false;
        for (int i=1;i<=l1;i++)
        {
            for (int j=1;j<=l2;j++)
            {
                double a1=sqrt((a[i].x-b[j].x)*(a[i].x-b[j].x)+(a[i].y-b[j].y)*(a[i].y-b[j].y));
                if (a1-(int)a1<1e-6)
                {
                     int a2=(int)a1;
                    if (a2==zz) 
                    {
                        printf("Yes\n");
                        fl=true;
                        break;
                    }
                }
            }
            if (fl) break;
        }
        if (!fl) printf("No\n");
        l1=0;l2=0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值