bzoj3505 [Cqoi2014]数三角形

来源:互联网 发布:红米note2手机壳淘宝 编辑:程序博客网 时间:2024/06/05 02:40

题目

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

#include<bits/stdc++.h>#define N 1000using 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;}