题意:给定n,m,k,问能否找到x坐标在n范围内,y坐标在m范围内的三个点,使得三角形的面积=n*m/k,不存在输出NO,存在输出YES并输出三个点的坐标(任意一个解)
思路:其实就是一个公式变形题,但有的地方没有想到,,,假定存在一个直角三角形的面积满足条件,两直角边长分别为a,b,那么有 n * m / k = a * b / 2 那么有 2 * n * m / k = a * b,那么如果2 * n * m 不是k的倍数,那么直接输出NO,否则的话找出满足条件的a,b即可。(可以通过和k的gcd来找)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{
ll n,m,k,a,b;
scanf("%lld%lld%lld",&n,&m,&k);
if(n*m*2%k)
printf("NO\n");
else
{
ll d=__gcd(2*n,k);
if(d==1)
a=n,b=2*m/k;
else
a=2*n/d,b=d*m/k;
printf("YES\n0 0\n");
printf("%lld 0\n",a);
printf("0 %lld\n",b);
}
return 0;
}