您的位置:首页 > 其它

bzoj3505 [Cqoi2014]数三角形

2017-09-08 22:31 225 查看
题目

先选3个点的总数减去三点共线的,横的,竖的,斜的,都一减就好了。

#include<bits/stdc++.h>
#define N 1000
using namespace std;
int gcd[N+1][N+1];
int m,n;
long long tmp,ans;
int read()
{
int x=0;
char c=getchar();
while(c>'9'||c<'0')c=getchar();
while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();
return x;
}
int GCD(int a,int b)
{
if(a<b)swap(a,b);
if(gcd[a][b]!=-1)return gcd[a][b];
return gcd[a][b]= b==0?a:GCD(b,a%b);
}
int main()
{
memset(gcd,-1,sizeof(gcd));
n=read(),m=read();
tmp=(long long)(n+1)*(m+1);
ans=tmp*(tmp-1)*(tmp-2)/6;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=m;j++)
if(i||j)
{
if(!i||!j)ans-=(long long)(GCD(i,j)-1)*(n-i+1)*(m-j+1);
else ans-=(long long)2*(GCD(i,j)-1)*(n-i+1)*(m-j+1);
}
}
cout<<ans;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: