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

  • 相关阅读:
    [C++]仿java.lang.String的字符串工具类[原]
    SQL基础1创建表、用户
    Linux中gdb 查看core堆栈信息
    Direct3D9基础工具类[原]
    eclipse3.4启动错误
    ndk连接第三方库
    数据库基本概念
    MySQL常见命令
    MySQL启动和停止
    MySQL配置文件
  • 原文地址:https://www.cnblogs.com/zhanhonhao/p/11269236.html
Copyright © 2011-2022 走看看