Link:   http://codeforces.com/contest/407/problem/A

给定直角三角形的2个直角边a,b。求在直角坐标系中,是否存在对应的直角三角形,使得三个定点都在整点上,并且三边都不和坐标轴平行。

如果存在,输出YES,和三个点的坐标。否则输出NO

很显然,为了方便,可以把原点作为 一个顶点。

这道题目做的时候少考虑了很多情况。

比如:

如何使得边不和坐标轴平行?  要保证要求的另外两个点的横坐标或者纵坐标不能相等。

如何保证三角形是直角三角形? 只需要保证,另外两个点和坐标轴围成的三角形相似。

因为范围是1000,所以可以暴力求解。复杂度O(10^6)

 /*
  * =====================================================================================
  *       Filename : triangle.cpp
  *    Description : triangle
  *    Version     : 0.1
  *        Created : 03/30/14 15:57
  *         Author : Liu Xue Yang (LXY), liuxueyang457@163.com
  *         Motto  : How about today?
  * =====================================================================================
  */
 #include <cmath>
 #include <cstdio>
 #include <cstdlib>
 #include <iostream>
 using namespace std;

 /*
  * ===  FUNCTION  ======================================================================
  *         Name:  gcd
  *  Description:  gcd
  * =====================================================================================
  */
     int
 gcd ( int a, int b )
 {
      ? a : gcd(b, a % b);
 }        /* -----  end of function gcd  ----- */
 /*
  * ===  FUNCTION  ======================================================================
  *         Name:  test
  *  Description:  test
  * =====================================================================================
  */
     void
 test ( int xa, int ya, int xb, int yb )
 {
     if ( xa == xb || ya == yb ) {
         return;
     }
     printf ( "YES\n" );
     printf ( "0 0\n" );
     printf ( "%d %d\n", xa, ya );
     printf ( "%d %d\n", xb, yb );
     exit();
     return ;
 }        /* -----  end of function test  ----- */

 /*
  * ===  FUNCTION  ======================================================================
  *         Name: main
  * =====================================================================================
  */

     int
 main ( int argc, char *argv[] )
 {
     int a, b;
     scanf ( "%d%d", &a, &b );
     ; x < a; ++x ) {
         ; y < a; ++y ) {
             if ( x * x + y * y == a * a ) {
                 int g = gcd(x, y);
                 int dx = x / g, dy = y / g, u = dx * dx + dy * dy;
                 int v = b * b, ratio = v / u, k = (int)sqrt(ratio) ;
                 if ( v % u ) {
                     continue;
                 }
                 if ( k * k != ratio ) {
                     continue;
                 }
                 test(x, y, dy * k, -dx * k);
                 test(x, y, -dy * k, dx * k);
             }
         }
     }
     puts("NO");

         return EXIT_SUCCESS;
 }                /* ----------  end of function main  ---------- */

这是tourist的代码

最新文章

  1. sql-分组排序
  2. C#基础知识大杂烩
  3. hdu 4882 ZCC Loves Codefires (贪心 推导)
  4. 找呀志_通过开源框架引AsyncHttpClient上传文件
  5. Java集合框架体系详细梳理,含面试知识点。
  6. JQ在光标处插入文字
  7. [LeetCode] Split Linked List in Parts 拆分链表成部分
  8. JVM的内存区域模型
  9. 第02节:JMS基本概念和模型
  10. 学习笔记CB004:提问、检索、回答、NLPIR
  11. Haproxy 配置 ACL 处理不同的 URL 请求
  12. JAVA核心技术I---JAVA基础知识(二进制文件读写和zip文件读写)
  13. loadrunner11迭代录制注册账号
  14. C#连接oracle连接字符串
  15. 接口自动化(atp,utp)
  16. day 33 线程池有关的
  17. js 提示框的实现---组件开发之(一)
  18. bat 栈上限
  19. C#.NET常见问题(FAQ)-public private protectd internal有什么区别
  20. 社交类APP原型模板分享——Tinder

热门文章

  1. AAS代码运行-第4章
  2. Erlang&amp;RabbitMQ服务安装配置
  3. 第二篇.Bootstrap起步
  4. ubuntu 13.04 telnet 详细配置
  5. what we do and how we behave
  6. 6、Android之LayoutInflater.inflate()
  7. AudioUnit 用法
  8. css2--collapse
  9. css display:inline-block 出现空格解决方案
  10. 第K大数