zoukankan      html  css  js  c++  java
  • 【BZOJ3505】[Cqoi2014]数三角形 组合数

    【BZOJ3505】[Cqoi2014]数三角形

    Description

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

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

    Input

    输入一行,包含两个空格分隔的正整数m和n。

    Output

    输出一个正整数,为所求三角形数量。

    Sample Input

    2 2

    Sample Output

    76
    数据范围
    1<=m,n<=1000

    题解:显然要用补集法,我们只需要求出三点共线的方案数即可。方法是先枚举两端的点所形成的向量,然后线段中间的点的个数就是gcd(x,y)。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    typedef long long ll;
    int m,n;
    ll ans;
    int gcd(int a,int b)	{return (!b)?a:gcd(b,a%b);}
    ll c3(int x)	{return (ll)x*(x-1)*(x-2)/6;}
    int main()
    {
    	scanf("%d%d",&n,&m);
    	int i,j,g;
    	for(i=1;i<=n;i++)	for(j=1;j<=m;j++)
    	{
    		g=gcd(i,j);
    		ans+=(ll)(n-i+1)*(m-j+1)*(g-1);
    	}
    	ans=c3((n+1)*(m+1))-ans*2-(m+1)*c3(n+1)-(n+1)*c3(m+1);
    	printf("%lld",ans);
    	return 0;
    }
  • 相关阅读:
    阿里笔试题—战报交流
    2 基于梯度的攻击——PGD
    1 基于梯度的攻击——FGSM
    0 对抗样本
    自然语言处理 复习笔记 3
    自然语言处理 复习笔记 2
    自然语言处理 复习笔记 1
    GRU
    1*1卷积核的作用
    BP原理
  • 原文地址:https://www.cnblogs.com/CQzhangyu/p/7367372.html
Copyright © 2011-2022 走看看