• 【luogu2181】对角线


    首先由于不会有三条对角线交于一点,所以过某一个交点有且只能有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^)/~

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 unsigned long long n,ans;
     4 int main()
     5 {
     6     scanf("%lld",&n);
     7     ans=n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4;
     8     printf("%lld
    ",ans);
     9     return 0;
    10 }
  • 相关阅读:
    洛谷 P2234 [HNOI2002]营业额统计
    洛谷p3146&p3147
    洛谷 p1439 最长公共子序列
    搜索
    一步一步分析Caliburn.Micro(二:绑定执行方法Message现学现卖之自定命令)
    一步一步分析Caliburn.Micro(一:绑定执行方法Message)
    整理的C# 字符串类
    不用ADOX.CatalogClass创建Access数据库文件
    取远程网页数据 WebClient,HttpWebRequest
    C# LinQ 与 ADO.NET
  • 原文地址:https://www.cnblogs.com/ww3113306/p/8762967.html
Copyright © 2020-2023  润新知