bzoj 3505 [Cqoi2014]数三角形(组合计数)

时间:2021-12-14 09:48:46

【题目链接】

  http://www.lydsy.com/JudgeOnline/problem.php?id=3505

【题意】

  在n个格子中任选3点构成三角形的方案数。

【思路】

  任选3点-3点共线的情况。

【代码】

 #include<cstdio>
#include<iostream>
using namespace std; typedef long long ll; ll C[][]; void get_pre(int n)
{
C[][]=;
for(int i=;i<=n;i++) {
C[i][]=;
for(int j=;j<=;j++)
C[i][j]=C[i-][j]+C[i-][j-];
}
}
int gcd(int i,int j)
{
return j==?i:gcd(j,i%j);
}
int n,m; int main()
{
scanf("%d%d",&n,&m);
n++,m++;
if(n>m) swap(n,m);
get_pre(n*m);
ll ans=C[n*m][],tmp=;
ans-=n*C[m][]+m*C[n][];
for(int i=;i<n;i++) for(int j=;j<m;j++) {
int x=gcd(i,j)+;
if(x>)
ans-=(x-)**(n-i)*(m-j);
}
printf("%lld\n",ans);
return ;
}