其他分享
首页 > 其他分享> > wangkoala杂题总集(根据个人进度选更)

wangkoala杂题总集(根据个人进度选更)

作者:互联网

CQOI2014 数三角形

首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m;

同理就有列中三点共线的方案数:n*C(m,3)

还要刨去对角线的方案数,由于gcd(i,j)-1就是这条线((i,j)与原点的连线)的方案数,然后这样的线斜着因为方向不同就要*2 然后这样的线在整个网格中总共有(m-j+1)*(n-i+1)种所以求出公式C(n*m,3)-n*C(m,3)-m*C(n,3)-∑(m-j+1)*(n-i+1)*(gcd(i,j)-1)*2,完结!

 

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cstdio>
 6 #define LL long long
 7 using namespace std;
 8 LL n,m,ans;
 9 LL gcd(LL x,LL y){return y==0?x:gcd(y,x%y);}
10 int main()
11 {
12     scanf("%lld %lld",&n,&m);
13     n++,m++;
14     for(int i=1;i<=n;i++)
15         for(int j=1;j<=m;j++)
16         {
17             ans+=(n-i)*(m-j)*(gcd(i,j)-1)*2;
18             //cout<<i<<" "<<j<<" "<<(n-i+1)*(m-j+1)*(gcd(i,j)-1)*2<<endl;
19         }
20     LL q=n*m;
21     if(q<=2){printf("0\n");return 0;}
22     LL C=q*(q-1)*(q-2)/6;
23     C-=n*(n-1)*(n-2)/6*m;
24     C-=m*(m-1)*(m-2)/6*n;
25     printf("%lld\n",C-ans);
26     return 0;
27 }
A数三角形

 

(本杂题集根据个人进度选更!)

 

标签:gcd,wangkoala,LL,long,int,总集,include,杂题,lld
来源: https://www.cnblogs.com/hzoi-lsc/p/11234649.html