zoukankan      html  css  js  c++  java
  • 划分土地(how many pieces of land)

    题目描述:

    给一个椭圆,上面有n个点,两两连接这n个点,得到的线段能把椭圆分为几个区域?

    思路:

    首先想想,n个点在椭圆边缘,每两个点两两连接有(C^2_n)条线段,这些线段交于很多点,求这些线段最多把椭圆分成几个部分。

    考虑到欧拉公式:在平面图中(V-E+F=2)(V)为顶点数,(E)是边数,(F)是面数。我们要求的是(F),只要求(E)(V)就行了。那么怎么求(V)呢?

    考虑每一个顶点,以这个顶点为基础,不断向其他点发出对角线,在对角线左边的点是(i),右边的便是(n-2-i)个点,将左边的点与右边的点相互连接,便会与这条对角线相交,交点有(i(n-2-i))个,但是由于对每个点都枚举,这样会重复计算。重复计算了几次呢?我们知道,要产生一个交点需要两条线段,也就需要四个顶点,也就是说,遍历所有顶点后,对这一个交点事实上我们重复了四次,因为有四个顶点贡献了它。同理,边重复计算了两次。因此:(V=n+frac{n}{4}sum_{i=0}^{n-2}i(n-2-i))(E=n+frac{n}{2}sum_{i=0}^{n-2}(i(n-2-i)+1))

    所以椭圆内的面有$F=E-V+2-1=frac{n}{4}sum_{i=0}^{n-2}i(n-2-i)+frac{n(n-1)}{2}+1=frac{n(n-3)(n-2)(n-1)}{24}+frac{n(n-1)}{2}+1 $。

    由于(sum_{i=1}^n i(n+1-i)=frac{n(n+1)(n+2)}{6})

    证明:

    (n=1)时公式成立,假设n=k时也成立

    (a_k=1*k+2*(k-1)+...+k*1)

    (n=k+1)时,

    (a_{k+1}=1*(k+1)+2*k+...+(k+1)*1)

    (a_{k+1}-a{k}=1+2+...+k+1=frac{(k+2)(k+1)}{2})(a_{k+1}=a_k+frac{(k+2)(k+1)}{2}=frac{n(n+1)(n+2)}{6}+frac{(k+2)(k+1)}{2}=frac{(k+1)(k+2)(k+3)}{6}).

    证毕

    注意如果找规律,1,2,4,8,16当n等于6时为31就不对了。

    顺便说一下:

    n个顶点形成的图要边数最大,就要形成完全图,完全图的边数为(frac{n(n-1)}{2})

    参考文章:

    weijifen000,UVa10213 多少块土地,https://blog.csdn.net/weijifen000/article/details/82709741

  • 相关阅读:
    2021.4.14
    每日总结
    每日总结
    每日总结
    oracle db组面试 复习数据库
    二叉树根结点到叶节点的最短距离
    minheap 最小堆的实现
    Maximum element in a sorted and rotated array排序和旋转数组中的最大元素
    树和图bfs的一个共同点
    117. Populating Next Right Pointers in Each Node II 不完全二叉树连接右边节点
  • 原文地址:https://www.cnblogs.com/zhanhonhao/p/11269236.html
Copyright © 2011-2022 走看看