zoukankan      html  css  js  c++  java
  • Codeforces Round #512 (Div. 2) D. Vasya and Triangle

    参考了别人的思路:https://blog.csdn.net/qq_41608020/article/details/82827632

             http://www.cnblogs.com/qywhy/p/9695344.html

    首先根据皮克定理,2*m*n/k一定要是一个整数,也就是说2*m*n%k !=0 的都可以不用算了

    最简单的构造方法肯定是 (a,0),(0,b)

    2*n*m%k ==0,把2*n*m看成2*n和m两部分,k中的质因子,一部分在2*n中,一部分在m中,当然这个“一部分”可以是0    

    例子:2*3*5%15 == 0   k的质因子分别来自n和m

    当k和2*n含有相同的质因子时

    令t=gcd(2*n,k)   t一定大于等于2

    令a = 2n/t     a一定小于n

    b = (2*m*n)/(a*k)

    b=m*t/k     b一定小于等于m(因为t一定大于等于k)

    当k和2*n不含相同质因子时

    那么质因子就全部包含在m里面

    直接令a = n   b = 2*m/k 即可   因为k >= 2  所以不会超范围

    ac:代码  

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    long long n,m,k;
    ll gcd(ll a,ll b)
    {
        if (b==0) return a;
        return gcd(b,a%b);
    }
    int main()
    {
        scanf("%lld%lld%lld",&n,&m,&k);
        if (n*m*2%k!=0)
        {
            printf("NO");
            return 0;
        }
        printf("YES
    0 0
    ");
        long long g = gcd(2*n,k);
        if(g == 1)
        {
            ll a = n;
            ll b = 2*m/k;
            printf("%lld 0
    ",a);
            printf("0 %lld
    ",b);
        }
        else
        {
            ll a = 2*n/g;
            ll b = m*g/k;
            printf("%lld 0
    ",a);
            printf("0 %lld
    ",b);
        }
    }
    

      

  • 相关阅读:
    solaris10 服务管理
    DLL的导出导入与调用
    c# Font字体
    WaitForMultipleObjects、WaitForSingleObject、GetExitCodeThread
    solaris10补丁管理
    注册表API函数
    简单的编码加密
    asp.net 调用外部程序
    Global.cs 获取网址
    Jquery easyui dialog组件, 默认不自动打开
  • 原文地址:https://www.cnblogs.com/mltang/p/9700167.html
Copyright © 2011-2022 走看看