• codevs 3693 数三角形


    /*
    n*m个点中选3个 再排除三点共线
    共线分两类
    1 在横线或者竖线上  m*C(n,3) n*C(m,3) 
    2 在对角线上
     这个比较麻烦 以为对角线和矩阵是一一对应的
     我们转化成求矩阵 并且保证有两个点在矩阵的角上
     接下来的问题就是求 n m 大小的矩阵对角线经过几个点
     我们设可构成的最小的三角形的底和高分别是ni mi
     显然ni mi 分别是n m的约数 那么分成的线段数也是nm的约数
     分成的点数是线段数+1 那么点数最多就是gcd了 去掉两头的
     所以共有gcd(n m)-1 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 1810
    #define ll unsigned long long
    using namespace std;
    ll n,m,t;
    int gcd(int a,int b)
    {
        return !b?a:gcd(b,a%b);
    }
    ll C(ll a,ll b)
    {
        if(b>a-b)b=a-b;
        ll r=1;
        for(int i=1;i<=b;i++,a--)r=(r*a)/i;
        return r;
    }
    int main()
    {
        cin>>n>>m;n++,m++;
        for(int i=1;i<=n-1;i++)
          for(int j=1;j<=m-1;j++)
            t+=((n-1-i+1)*(m-1-j+1))*(gcd(i,j)-1);
        t<<=1;
        if(m>=2)t+=m*C(n,3);
        if(n>=2)t+=n*C(m,3);
        ll tot=C(n*m,3);
        cout<<tot-t<<endl;
        return 0;
    }
  • 相关阅读:
    hashlib 库
    包--json 与 pickle 模块
    模块
    叠加多个装饰器,列表生成式,字典生成式,匿名函数
    函数的递归调用和二分法
    Redis之哨兵模式
    Redis之集群
    Redis之主从复制
    Django之redis-session
    Python操作redis
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5708900.html
Copyright © 2020-2023  润新知