codeforces 407C Triangle

原创 2015年11月20日 21:14:24

Description
There is a right triangle with legs of length a and b. Your task is to determine whether it is possible to locate the triangle on the plane in such a way that none of its sides is parallel to the coordinate axes. All the vertices must have integer coordinates. If there exists such a location, you have to output the appropriate coordinates of vertices.

Input
The first line contains two integers a, b (1 ≤ a, b ≤ 1000), separated by a single space.

Output
In the first line print either “YES” or “NO” (without the quotes) depending on whether the required location exists. If it does, print in the next three lines three pairs of integers — the coordinates of the triangle vertices, one pair per line. The coordinates must be integers, not exceeding 109 in their absolute value.

Sample Input
Input
1 1
Output
NO
Input
5 5
Output
YES
2 1
5 5
-2 4
Input
5 10
Output
YES
-10 4
-2 -2
1 2

题意:给出一个直角三角形的两条边长a、b,看能否将这个三角形放到一个二维平面内,使得三条边都不能平行于坐标轴,如果能输出三个点的坐标,否则输出NO

把直角顶点放在(0,0)会更好做;首先,看两个边长是不是都能成为两个整数的平方和的开根号(可能会有多个!!),然后判断以这两个边为斜边的直角三角形是不是能想似,最后就看直角三角形最后一条边是否是平行于坐标轴的。

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int a,b,h1[10],l1[10],h2[10],l2[10],flag1=0,flag2=0;
    cin>>a>>b;
    for(int i=1; i<1000; i++)
    {
        for(int j=i; j<1000; j++)
        {
            if(i*i+j*j==a*a)
            {
                h1[flag1]=i;
                l1[flag1]=j;
                flag1++;
            }
            if(i*i+j*j==b*b)
            {
                h2[flag2]=i;
                l2[flag2]=j;
                flag2++;
            }
        }
    }
    int t=0;
    if(flag1==0||flag2==0)
        cout<<"NO"<<endl;
    else
    {
        for(int i=0; i<flag1; i++)
        {
            for(int j=0; j<flag2; j++)
            {
                if(1.0*h1[i]/h2[j]==1.0*l1[i]/l2[j])
                {
                    if(h1[i]!=l2[j])
                    {
                        cout<<"YES"<<endl;
                        cout<<0<<" "<<0<<endl;
                        cout<<l1[i]<<" "<<h1[i]<<endl;
                        cout<<0-h2[j]<<" "<<l2[j]<<endl;
                        t=1;
                        break;
                    }
                    else if(h2[j]!=l1[i])
                    {
                        cout<<"YES"<<endl;
                        cout<<0<<" "<<0<<endl;
                        cout<<l2[j]<<" "<<h2[j]<<endl;
                        cout<<0-h1[i]<<" "<<l1[i]<<endl;
                        t=1;
                        break;
                    }
                }
            }
            if(t==1)
                break;
        }
        if(t==0)
            cout<<"NO"<<endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

CodeForces 407A Triangle

题意: 一个直角三角形所有点都在二维平面整点上  其中两条边长度分别为a和b  且没有任何一条边与坐标轴平行  问  这样的三角形存不存在  如果存在输出一组坐标 思路: 可以设解存在  然后先固...

CodeForces 407A-Triangle【模拟】

A. Triangle time limit per test 1 second memory limit per test 256 megabytes input ...

Codeforces Round #407(Div. 2)C. Functions again【思维+最大连续子序列的和】

C. Functions again time limit per test 1 second memory limit per test 256 megabytes ...

Codeforces Round #407 (Div. 2) C. Functions again(最大连续子段和)

题目地址:点击打开链接 思路:一共就两种情况,要么奇数位为负,要么偶数位的为负。两个分别求下最大连续子段和取较大值就行。 #include using namespace std;...
  • CillyB
  • CillyB
  • 2017年03月30日 16:50
  • 230

Codeforces#407C. Functions again(DP)

本人acm小白,我会一直坚持本心,虚心求教,欢迎各位大神指出错误

Codeforces Round #407 (Div. 2) C 数学 + DP

题目链接思路: 首先我们可以将每相邻两项的差的绝对值算出来,然后按顺序形成一个新的数列: 如样例 1 4 2 3 1 --> 3 2 1 2记新数组为 a 观察公式,选取某一起点元素u...

Codeforces Round #407 (Div. 2) C

C. Functions again time limit per test1 second memory limit per test256 megabytes inputstandard i...
  • gh6267
  • gh6267
  • 2017年03月31日 19:49
  • 119

Codeforces Round #407 (Div. 2) C. Functions again(前缀和)

C. Functions again time limit per test1 second memory limit per test256 megabytes inputstandard i...

codeforces 407C Curious Array 数学

题目描述:给出一个有n(0 ,输出经过m次修改操作之后的a数组。 思路:首先从性质的角度观察这个问题,有两个可能有用的性质:            ①k比较小,说不定可以从这里做文章②组合数具有常...
  • jijijix
  • jijijix
  • 2017年03月20日 19:03
  • 188

Codeforces Round #407 (Div. 2) C.Functions again(789C)

题目大意:对于N个数,选定其中的【L,R】的数, 使得|a[l+1]-a[l]|-|a[l+2]-a[l+3]|+….+|a[r-1]-a[r-2]|-|a[r]-a[r-1]|最大; 其实就是每...
  • ddjing_
  • ddjing_
  • 2017年04月04日 14:28
  • 146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:codeforces 407C Triangle
举报原因:
原因补充:

(最多只允许输入30个字)