把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

luogu P3166 [CQOI2014]数三角形

题面传送门
运用集合思想,用总集减去补集得到所求集合。
总共的点个数减去平行于坐标系的三点共线减去斜边三点共线。
斜边三点共线:枚举一个点,算出他与原点中间点的个数,再把这条线分别向上向右平移, 分别减去。
代码实现:

#include<cstdio>
using namespace std;
inline int gcd(int x,int y){
   if(!y) return x;
   return gcd(y,x%y);
}
int main(){
   register int i,j;
   register long long n,m,ans,tot,pus,now;
   scanf("%lld%lld",&n,&m);
   n++;m++;
   ans=n*m*(n*m-1)*(n*m-2)/6-m*n*(n-1)*(n-2)/6-n*m*(m-1)*(m-2)/6;
   for(i=1;i<n;i++){
   	for(j=1;j<m;j++){
   		ans-=2*(gcd(i,j)-1)*(n-i)*(m-j);
   	}
   }
   printf("%lld",ans);
   return 0;
}
posted @ 2020-03-29 18:32  275307894a  阅读(45)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end