BZOJ 3505 [Cqoi2014]数三角形
题解:容斥原理,总的三角形减去不符合题意的三角形
不符合题意的三角形即三点共线
设一个端点在(0,0),枚举另一个端点,用gcd算出线段中间夹着的点
因为相同的线段可以同时计算
所以复杂度O(n^2log)
容斥错了WA了几发QWQ
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long Lint;
int n,m;
Lint ans;
int Gcd(int a,int b){
if(b==0)return a;
return Gcd(b,a%b);
}
int main(){
cin>>n>>m;
ans=1LL*((n+1)*(m+1))*((n+1)*(m+1)-1)*((n+1)*(m+1)-2)/6;
// cout<<ans<<endl;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
int tmp=Gcd(i,j)-1;
ans=ans-1LL*tmp*2*(n-i+1)*(m-j+1);
}
}
for(int i=1;i<=n;++i){
int tmp=i-1;
ans=ans-1LL*tmp*(n-i+1)*(m+1);
}
for(int i=1;i<=m;++i){
int tmp=i-1;
ans=ans-1LL*tmp*(m-i+1)*(n+1);
}
cout<<ans<<endl;
return 0;
}
致歉:笔者已经意识到这是一篇几乎没有价值的文章,给您的阅读带来不好的体验,并且干扰了您的搜索环境,非常抱歉!

浙公网安备 33010602011771号