https://codeforces.com/problemset/problem/1030/D
题目大意:给出三个整数
n
、
m
、
k
n、m、k
n、m、k,问是否能找到三个点
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
(x_1,y_1),(x_2,y_2),
(x1,y1),(x2,y2),
(
x
3
,
y
3
)
(x_3,y_3)
(x3,y3)满足
0
<
=
x
i
<
=
n
&
0
<
=
y
i
<
=
m
0<=x_i<=n\&0<=y_i<=m
0<=xi<=n&0<=yi<=m且这个三个点构成的三角形的面积为
n
∗
m
/
k
n*m/k
n∗m/k。
思路:结论:三个坐标都是整点的三角形的面积一定等于
x
/
2
x/2
x/2,且
x
x
x是一个整数。证明如下:
那么思路就很清晰了,对
(
n
,
k
)
(n,k)
(n,k)和
(
m
,
k
)
(m,k)
(m,k)各做一次
G
C
D
GCD
GCD化简后,若
k
>
2
k>2
k>2则说明无解,也就是说
k
=
1
k=1
k=1或
k
=
2
k=2
k=2,那么就非常好做了,搞一个直角三角形凑出这个面积就行了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,k;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
ll t=n;
ll tmp=gcd(n,k);
n/=tmp,k/=tmp;
tmp=gcd(m,k);
m/=tmp,k/=tmp;
if(k>2)
printf("NO\n");
else
{
printf("YES\n");
if(k==2)
;
else
{
if(2*n<=t)
n<<=1;
else
m<<=1;
}
printf("0 0\n");
printf("%lld 0\n",n);
printf("0 %lld\n",m);
}
return 0;
}