• P3166 [CQOI2014]数三角形


    传送门

    直接求还要考虑各种不合法情况,不好计数

    很容易想到容斥

    把所有可能减去不合法的情况剩下的就是合法情况

    那么我们只要任取不同的三点就是所有可能,不合法情况就是三点共线

    对于两点 $(x_1,y_1) , (x_2,y_2)$ ,它们之间有 $gcd(left | x_1-x_2 ight |,left | y_1-y_2 ight |)-1$ 个交点

    证明?因为第三点C如果在两点A,B间的线上

    那么$frac{left | x_A-x_C ight |}{ left | y_A-y_C ight |}=frac{left | x_A-x_B ight |}{ left | y_A-y_B ight |}$

    因为 $x_C,y_C$ 为整数且在A,B之间,所以只有 $gcd(left | x_A-x_B ight |,left | y_A-y_B ight |)-1$ 个位置可取

    自己画个图感性理解一下就好了

    所以一个直接的思路就是枚举所有两个点A,B,算出C的数量

    但是可以发现有很多线段AB其实本质是一样的,只是位置不同,我们可以通过平移来得到

    把点A固定在原点上,然后枚举B,这样可以得到所有本质不同的线段

    然后考虑有多少种平移方案

    设 B 坐标为 (X,Y),那么线段可以向上平移最多 N-Y 个单位,向右平移最多 M-X 个单位

    因为可以平移 0 个单位,所以共有 (N-Y+1)(M-X+1) 种方案

    因为AB斜率可以为负,所以要把之前求出来的方案数再乘 2 

    在坐标系中任选3点的方案数为 $C_{(N+1)(M+1)}^{3}$

    别忘了减去三点横坐标相同或纵坐标相同的情况:

    对于每条横线,都有 $C_{M+1}^{3}$种方案,共 N 条横线

    对于每条纵线,也是一样,为 $M*C_{N+1}^{3}$

    别忘了开 long long

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    inline int read()
    {
        int x=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
        while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
        return x*f;
    }
    int n,m,t;
    ll ans;
    int gcd(int a,int b) { return b ? gcd(b,a%b) : a; }
    int main()
    {
        n=read()+1; m=read()+1;
        t=n*m;
        ans=1ll*t*(t-1)*(t-2)/(1*2*3) - 1ll* m* n*(n-1)*(n-2)/(1*2*3) - 1ll* n* m*(m-1)*(m-2)/(1*2*3);
        //总方案数 - 纵线不合法方案 - 横线不合法方案
        for(int i=1;i<n;i++)//枚举点B纵坐标
            for(int j=1;j<m;j++)//横坐标
                ans-=1ll*(n-i)*(m-j)*(gcd(i,j)-1)*2;//减去斜线不合法方案数
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    【折腾】Docker官网下载Docker实在太慢怎么破!!!!!windows 安装docker
    centos7搭建FTP文件服务器--虚拟用户
    AWK简单案例
    SaltStack系统初始化
    ReactNative环境搭配及软件安装
    extundelete工具恢复误删文件
    linux磁盘阵列raid1的搭建教程
    linux中Raid0磁盘阵列的搭建
    子网掩码的计算方法
    linux网络管理命令
  • 原文地址:https://www.cnblogs.com/LLTYYC/p/9914122.html
Copyright © 2020-2023  润新知