CodeForces 407A Triangle
2014-03-31 20:59
393 查看
题意:
一个直角三角形所有点都在二维平面整点上 其中两条边长度分别为a和b 且没有任何一条边与坐标轴平行 问 这样的三角形存不存在 如果存在输出一组坐标
思路:
可以设解存在 然后先固定(0,0)这个点 这样就可以求出所有满足边长是a和b的(x,y)坐标分别放在两个数组里
注意只枚举第一、二象限即可 要不还要防止三点共线
枚举a和b的所有解 如果这确定的三个点满足题目要求就输出
代码:
一个直角三角形所有点都在二维平面整点上 其中两条边长度分别为a和b 且没有任何一条边与坐标轴平行 问 这样的三角形存不存在 如果存在输出一组坐标
思路:
可以设解存在 然后先固定(0,0)这个点 这样就可以求出所有满足边长是a和b的(x,y)坐标分别放在两个数组里
注意只枚举第一、二象限即可 要不还要防止三点共线
枚举a和b的所有解 如果这确定的三个点满足题目要求就输出
代码:
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> #include<string> #include<map> #include<set> #include<queue> using namespace std; int a,b,na,nb; int f[1010]; struct node { int x,y; }an[500],bn[500]; int main() { int i,j,cx,cy,c; for(i=1;i<=1000;i++) f[i]=i*i; scanf("%d%d",&a,&b); a*=a; b*=b; if(a<b) swap(a,b); for(i=1;i<=1000;i++) { for(j=1;j<=1000;j++) { if(f[i]+f[j]==a) { an[na].x=i; an[na].y=j; na++; an[na].x=-i; an[na].y=j; na++; } if(f[i]+f[j]==b) { bn[nb].x=i; bn[nb].y=j; nb++; bn[nb].x=-i; bn[nb].y=j; nb++; } } } for(i=0;i<na;i++) { for(j=0;j<nb;j++) { if(an[i].x!=bn[j].x && an[i].y!=bn[j].y) { cx=abs(an[i].x-bn[j].x); cy=abs(an[i].y-bn[j].y); c=cx*cx+cy*cy; if(a+b==c||a-b==c) { printf("YES\n"); printf("0 0\n%d %d\n%d %d\n",an[i].x,an[i].y,bn[j].x,bn[j].y); return 0; } } } } printf("NO\n"); return 0; }
相关文章推荐
- 组队赛5:二分图+大模拟
- 写轮眼桌面时钟
- 第三章作业
- 无名管道pipe 有名管道fifo
- 学JAVA (MARS)中2014年3月31日17:35:08
- 使用指针前必须初始化,且应该指向实际的变量
- 添加工具栏和工具栏按钮添加图片
- SPI协议简介
- PHP json_encode() 函数介绍
- socket阻塞与非阻塞,同步与异步、I/O模型
- DAX
- 用LuaBridge为Lua绑定C/C++对象
- 内存,磁盘,cache等访问速度
- java关键词
- PHP json_encode() 函数介绍
- 招聘和面试那些事儿
- PowerDesigner设计概念模型
- matlab实现四重积分和多重积分
- XML工具封装类
- signal函数理解或者void (*signal(int signum,void(*handler)(int)))(int)理解