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;
}
}