• cf1058d 几何 网格三角形


    题目:给定n,m,k  判断是否存在三角形 三点在端点 且(0<=x<=n ,0<=y<=m),面积 = n*m/k

    http://codeforces.com/contest/1058/problem/D

    思路:很容易知道 在网格上的三角形 ,面积*2是整数,所以n*m*2%k!=0 就是no

      所以可以把一个点放在原点 a*b/2 =  n*m/k   也就是 ab = 2nm/k

      这种求出个特解(a,0) (0,b) ,利用gcd

      如果 gcd(2n,k) >=2      a = 2*n/gcd(2ll*n,k) , 则 a<=n, b= 2nm/k/a = m/ k/gcd..  ,b<=m成立

      如果gcd(2n,k)==1 ,很明显 ,gcd(2m,k) >=2(因为有因子啊)  

    #include<bits/stdc++.h>
    using namespace std;
    
    #define ll long long
    #define pb push_back
    #define fi first
    #define se second
    #define all(v) v.begin(),v.end()
    
    const int N = 1e5+4;
    const int INF =1E9+4;
    const ll mod =1e9+7;
    
    ll gcd(ll a,ll b){
        return b==0?a : gcd(b,a%b);
    }
    int main(){
    
        ll n,m,k;
    
        cin>>n>>m>>k;
    
        if(2ll*m*n % k!=0){
    
            puts("NO");return 0;
        }
        puts("YES");
        ll a,b;
    
        if(gcd(2ll*n,k)>=2){
            a = 2*n/gcd(2ll*n,k);
            b = n*m*2/a/k;
        }
        else {
            b = 2*m/gcd(m*2,k);
            a = n*m*2/k/b;
        }
    
        printf("0 0
    0 %lld
    %lld 0
    ",b,a);
    
        return 0;
    }
  • 相关阅读:
    使用GitHub+hexo搭建个人独立博客
    HDU 3038
    POJ 1417
    HDU 1213
    ZOJ 3781
    ZOJ 3780
    ZOJ 3777
    HDU 3045
    HDU 3480
    POJ 1180
  • 原文地址:https://www.cnblogs.com/wjhstudy/p/9744845.html
Copyright © 2020-2023  润新知