codeforces 1030D Vasya and Triangle 简单数论

https://codeforces.com/problemset/problem/1030/D
在这里插入图片描述
题目大意:给出三个整数 n 、 m 、 k n、m、k nmk,问是否能找到三个点 ( 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 nm/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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值