zoukankan      html  css  js  c++  java
  • 【CQOI2014】数三角形

    给定一个 n×m 的网格,请计算三点都在格点上的三角形共有多少个。下图为 4×4 的网格上的一个三角形。

    20171221152130_62094

    注意:三角形的三点不能共线

    正难则反嘛

    既然三角形个数,那就算三点共线数,再用全集减去它

    注意,点的个数比边要+1【下面的N,M已经为n,m加1后】

    明显,全集为:C(N*M,3)

    横竖三点共线为:C(N,2)和C(M,2)

    斜着的三点共线枚举矩形,每个符合条件的矩形中有两条三点共线【对角线】

     

    #include<bits/stdc++.h>
    using namespace std;
    
    
    long long n,m,notri=0,ans=0;
    
    int gcd(int a,int b)
    {
        if(!b)
            return a;
        return gcd(b,a%b);
    }
    
    int main()
    {
        scanf("%lld%lld",&n,&m);
        n++;m++;
        notri+=n*(n-1)*(n-2)/6*m;
        notri+=m*(m-1)*(m-2)/6*n;
        ans=(n*m)*(n*m-1)*(n*m-2)/6;
        ans-=notri;
    
        for(int i=1;i<n;i++)
            for(int j=1;j<m;j++)
                ans-=(n-i)*(m-j)*(gcd(i,j)-1)*2;
        
        printf("%lld",ans);
        return 0;
            
    }



    “Make my parents proud,and impress the girl I like.”
  • 相关阅读:
    php CI框架基础知识
    1206 多表单提交,强类型
    1205 Mvc的Razor语法
    1204 Mvc
    1117 邮件验证
    1115 模板页
    1113 Ajax
    1110 Jquary动画
    1108 Jquary
    1107 Linq高级查询
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9440087.html
Copyright © 2011-2022 走看看