题面
传送门
分析
引理1:三角形的面积×2一定是整数
由座标系中的三角形面积公式
S=21(x1y2+x2y3+x3y1−x1y3−x2y1−x3y2)
显然得证
故若k2nm是整数,则有解,否则无解
引理2:一定能构造出一个直角边平行于座标轴的直角三角形,使它的面积为knm
设直角三角形两直角边为a,b
则ab=k2nm≤nm
由引理1k2nm为正整数,所以一定可以找到一对正整数(a,b)满足条件
那么,如何构造a≤n,b≤m的情况呢
显然2n或2m与k不互质
(1)若gcd(2n,k)̸=1,则a=gcd(2n,k)2n,b=ak2nm
由于2≤gcd(2n,k)≤k
则a≤n
b=ak2nm=gcd(2n,k)2kn2nm=km×gcd(2n,k)≤kmk=m
(2)若gcd(2n,k)=1,则a=n,b=k2m
由于k≥2,b≤m
代码
#include<iostream>
#include<cstdio>
using namespace std;
inline long long gcd(long long a,long long b){
return b==0?a:gcd(b,a%b);
}
long long n,m,k;
int main(){
cin>>n>>m>>k;
if((n*m*2)%k!=0){
printf("NO\n");
}else{
printf("YES\n");
long long S=(n*m*2)/k;
long long a,b;
if(gcd(n*2,k)!=1){
a=n*2/gcd(n*2,k);
b=S/a;
}else{
a=n;
b=m*2/k;
}
printf("0 0\n");
printf("%I64d 0\n",a);
printf("%I64d %I64d\n",a,b);
}
}