1 条题解

  • 0
    @ 2025-8-24 21:34:51

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ww3113306
    **

    搬运于2025-08-24 21:34:51,当前版本为作者最后更新于2018-03-12 13:36:24,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这明明是一道组合数的题,,,不懂为什么会放在计算几何当中。。。。

    感觉下面几个题解都只是放了个公式,并没有具体讲怎么来的

    (如果你觉得“在经过一些排列组合的技巧,就可以得出”算具体的话就另当别论了)

    感觉推起来还是很妙的

    其实这和对角线的公式没什么关系。。。。

    首先由于不会有三条对角线交于一点,所以过某一个交点有且只能有2条对角线

    而这两条对角线实质上是确定了4个顶点(也可以看做是一个四边形的两条对角线交于一点,求四边形的数量)。

    因此我们只需要确定4个顶点就得到了这个唯一确定的交点。

    因此我们只需要求这样4个顶点的搭配有多少个了

    也就是从n个顶点中取4个出来。

    根据组合数的公式,(如果你不知道组合数的公式可以这么推:第一次取可以n个点都是可以取的,第二次取的时候第一个取的点就不能取了,所以只能取(n-1)种,以此类推)

    由于改变四个点的顺序不会改变对角线,因此是求的组合而不是排列,也就要除以4!,也就是24

    于是我们就得到了公式: n * (n-1) * (n-2) * (n-3) / 24

    同时为了防止爆掉,但又不想写高精,

    我们可以采用一种化简的技巧

    于是原式可以化为:

    n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4

    那为什么这样一定是对的呢?难道不会因为除不尽却向下取整而导致错误吗?

    事实上是一定除得尽的

    首先n和n-1一定有一个是2的倍数,因此2可以除尽,

    同理n,n-1,n-2中一定有一个是3的倍数,因此3可以除尽(除掉2只会消除因数2而对3没有影响)

    同理4也可以除尽

    完\(^o^)/~

    #include<bits/stdc++.h>
    using namespace std;
    unsigned long long n,ans;
    int main()
    {
        scanf("%lld",&n);
        ans=n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4;
        printf("%lld\n",ans);
        return 0;
    }
    
    • 1

    信息

    ID
    1144
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者