• AcWing 1310. 数三角形


    题目传送门

    引理一

    引理二

    \(gcd(i,j)−1\)的证明

    对于斜边上的任何一点 \((x,y)\), 其满足:

    \[\large \frac{y-b}{x-a}=\frac{d-b}{c-a} \]

    注意:\(a≤x≤c,b≤y≤d\)

    可知:$$\large \displaystyle y=\frac{d-b}{c-a}(x-a)+b=\frac{\frac{d-b}{gcd(d-b,c-a)}}{\frac{c-a}{gcd(d-b,c-a)}}(x-a)+b
    \
    \Rightarrow
    \
    y=\frac{d-b}{gcd(d-b,c-a)}*\frac{x-a}{\frac{c-a}{gcd(d-b,c-a)}}+b \ \ \ x \in Z^+

    \[ 那么如果使得 $y∈Z^+$ 的话,必须使得 $\large \displaystyle \frac{c-a}{gcd(d-b,c-a)}|(x-a)$,即: $$\large x=\frac{c-a}{gcd(d-b,c-a)}*q+a\]

    对于条件 \(b≤y≤d\) 上述式子是由直线方程推出的,因此其在方程中等价于 \(a≤x≤c\), 因此我们只需要考虑 \(x\) 的范围限制即可:

    \[\large a≤x=\frac{c-n}{gcd(d-b,c-a)}*q+a≤c \\ \Rightarrow 0 ≤ q ≤ gcd(d-b,c-a) \]

    \(q\) 可以取这个区间中的所有整数,因此数量为 \(gcd(d−b,c−a)+1\)

    然后我们分析对于区间中的任意一个点 \((x,y)\), 由于上面 \(q\) 的范围可知 \(a≤x≤c\), 因此均在斜边上不加上两个端点的话,就是 \(gcd(d−b,c−a)−1\)

    算法分析

    本题使用 容斥原理 的思想

    题目给定长是\(n\),宽是\(m\)的矩形,因此总端点数有\((n + 1) * (m + 1)\)个,从总端点数选\(3\)个点的情况有
    \(\large \displaystyle C_{(n+1)∗(m+1)}^3\)种,再将不符合三角形规则的情况减去即可,即 三角形的数目 = \(\large \displaystyle C_{(n+1)∗(m+1)}^3\)- 不满足要求的情况(三点共线)

    不满足的情况

    • 1、 斜率不存在:\((m+1)C_{n+1}^3\)
    • 2、 斜率为\(0\)\((n+1)C_{m+1}^3\)
    • 3、斜率存在且不为 \(0\):由两个端点 \(A,B\) 组成的横坐标之差是 \(i\) ,纵坐标之差是 \(j\) 的线段共有 \(2(n−j+1)(m−i+1)\) 条,对于每一条线段斜率上共有 \(gcd(i,j)+1\) 个端点,减去 \(A,B\) 两个端点,即第三个点有 \(gcd(i,j)−1\) 种满足情况,因此总方案数是 \(2(gcd(i,j)−1)(n−j+1)(m−i+1)\)
  • 相关阅读:
    element 三级复选框
    element 复选框问题
    vue 的样式穿透(深度选择器) >>>
    随笔,用于直接复制粘贴
    element 弹窗无法重新赋值的问题
    @vue/cli 4.2.3版本的本地json读取和跨域配置(与旧版本vue不同)
    element表格及接口的对接
    axios的post请求即自动刷新
    Puppeteer 安装及失败原因
    Redis的安装
  • 原文地址:https://www.cnblogs.com/littlehb/p/16355697.html
Copyright © 2020-2023  润新知