Codeforce 407A

链接:点击打开链接

题意:给出一个三角形两个直角边长度a,b,问是否存在三个格点组成一个直角三角形使得直角边等于a,b,并且三边不平行于坐标轴

代码:

#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
    int x,y;
}pos_a[1000005],pos_b[1000005];
int a,b;
int judge(int x,int y,int z){
    return x*x+y*y==z*z;
}
int main(){                                 //只要以(0,0)为直角顶点再遍历即可
    int i,j,k_a,k_b,sign;
    while(scanf("%d%d",&a,&b)!=EOF){
        k_a=k_b=sign=0;
        for(i=1;i<=1000;i++)
        for(j=1;j<=1000;j++)
        if(judge(i,j,a))
        pos_a[k_a].x=-i,pos_a[k_a++].y=j;
        for(i=1;i<=1000;i++)
        for(j=1;j<=1000;j++)
        if(judge(i,j,b))
        pos_b[k_b].x=i,pos_b[k_b++].y=j;
        for(i=0;i<k_a;i++)
        for(j=0;j<k_b;j++){
//        cout<<pos_a[i].x<<" "<<pos_a[i].y<<endl;
//        cout<<pos_b[j].x<<" "<<pos_b[j].y<<endl;
        if(pos_a[i].y!=pos_b[j].y)
        if((pos_b[j].x-pos_a[i].x)*(pos_b[j].x-pos_a[i].x)+(pos_b[j].y-pos_a[i].y)*(pos_b[j].y-pos_a[i].y)==a*a+b*b){
        sign=1;
        goto next;
        }
        }
        puts("NO");
        next:
        if(sign){
        puts("YES");
        puts("0 0");
        printf("%d %d\n",pos_a[i].x,pos_a[i].y);
        printf("%d %d\n",pos_b[j].x,pos_b[j].y);
        }
    }
    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值