Vasya and Triangle CodeForces - 1030D
原题链接
考察:思维,数论
思路:
先考虑依据矩形边建立三角形.
(1) k==1 明显不成立
(2) \(n\)是\(k\)的倍数,明显\((0,0),(0,\frac{2n}{k})(m,0)\)
(3) \(m\)是\(k\)的倍数,明显\((0,0),(0,n),(\frac{2m}{k},0)\)
(4) \(S = \frac{ah}{2} = \frac{nm}{k}\),如果\(2nm\)不能整除\(k\),则输出NO.依照前面,\(n,m\)都不能整除\(k\).此时只考虑构造直角三角形.那么 \(a*b = \frac{2nm}{k}\),需要将\(a\)的范围压到\(n\),可以发现在前面的前提下,\(t = gcd(k,2n)>=2\),所以\(a = \frac{2n}{t},b = \frac{tm}{k}\)
Code
#include <iostream>
#include <cstring>
using namespace std;
typedef long long LL;
int n, m, k;
int gcd(int a,int b)
{
return b ? gcd(b, a % b) : a;
}
bool check()
{
if(2ll*n*m%k!=0||k==1)
return 0;
if(m%k==0)
{
int t = gcd(2 * m, k);
puts("YES");
printf("0 0\n0 %d\n%d 0\n",n,2 * m/ k);
return 1;
}
int t = gcd(2 * n, k);
puts("YES");
printf("0 0\n0 %lld\n%lld 0\n", 2ll * n / t,(LL)t * m / k);
return 1;
}
int main()
{
scanf("%d%d%d", &m, &n, &k);
if(!check())
puts("NO");
return 0;
}