Codeforces - 1053 - A. Vasya and Triangle
阿新 • • 發佈:2018-11-10
題目連結<http://codeforces.com/contest/1053/problem/A>
題意:
問能否選取三個點,(x1,y1) (x2,y2), (x3,y3),且0≤x1,x2,x3≤n, 0≤y1,y2,y3≤m。使得三個點組成的三角形面積為n*m/k。如果可以,輸出任意三個點即可。
題解:
首先可以發現,如果2*n*m%k不等於零那就肯定不可以。
至於構造的方法,很容易想到,確定一個點在原點,另外兩個點在座標軸上。
因為一定是整數點,且2*n*m%k==0,那麼可以設t=gcd(2*n,k),也就一定可以構造出另外兩個整數點:(2*n/t,0),(0,m*t/k)。
但當t==0的時候可能會越界,而此時gcd(2*n,k)一定不為1,所以反過來就行了。
#include<bits/stdc++.h> using namespace std; #define ll long long int main() { ll n,m,k; scanf("%lld%lld%lld",&n,&m,&k); if(2*n*m%k) printf("NO\n"); else{ printf("YES\n"); int t=__gcd(2*n,k); if(t!=1) printf("0 0\n%lld 0\n0 %lld\n",2*n/t,t*m/k); else{ t=__gcd(2*m,k); printf("0 0\n%lld 0\n0 %lld\n",n*t/k,2*m/t); } } return 0; }