[CQOI2014][BZOJ3505]数三角形
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3505
Sol:
发现正面求解不好直接搞
反面求解
所有的ans显然是$ C_{N*M}^3 $
排除所有三点共线的情况就行了
横着和竖着的很好求,$C_n^3 $和$ C_m^3 $
问题是斜着的
考虑一条斜线(0,0)->(α,β)
$tan θ$=$\frac{α}{β}$
设$a∈[0,α],b∈[0,β]$
$a$关于$b$的表达式就是
$b= \frac{β}{α} *a$
把$α$和$β$的gcd提出去 $a∈[0,α]$
只需要$a|α$
数量就是$gcd(α,β)-1$[减去最后一个点==]
然后就考虑这个斜线有几条就行了qwq
顺便注意long long
Code
#include <bits/stdc++.h> using namespace std; int main(){ long long N,M; scanf("%lld%lld",&N,&M); N++,M++; long long ans=N*M*(N*M-1)*(N*M-2)/6; long long ans1=N*(N-1)*(N-2)/6*M; ans=ans-ans1; long long ans2=M*(M-1)*(M-2)/6*N; ans=ans-ans2; for (int i=1;i<N;i++) for (int j=1;j<M;j++) ans-=(N-i)*(M-j)*(__gcd(i,j)-1)*2; cout<<ans; return 0; }
干啥啥不行