• 欧拉公式


    有一块椭圆的地,你可以在边界上选n个点,并两两连接得到n(n-1)/2条线段。它们最多能把土地分成多少个部分?

    解:

    最优方案是不让三条线段交与1点。

    欧拉公式:V-E+F=2.其中V是顶点(即所有线段的断点数加上交点数),E是边数(即n段椭圆弧加上这些线段被切成的段数),F是面数(即土地块数加上椭圆外那个无穷大的面)。

    换句话说,只需求出V和E,答案就是E-V+1;

    不管是定点还是边,计算时都要枚举一条从固定点出发(所以最后要乘以n)的所有对角线。假设该对角线左边有i个点,右边有n-2-i个点,则左右两边的点两两搭配后在这条对角线上形成了i*(n-2-i)个焦点,得到了i*(n-2-i)+1条线段。注意:每个交点被重复计算了4次,而每条线段被重新计算了两次,因为形成每个交点需要4个点两两组成2条线段相交于一点,需要2个点形成1条被分割的线段。所以得:

    如果将n=1~5的答案写出来得:1、2、4、8、16.可能就会推出n=6时是32,但是不是的,而是31,因此找规律的时候要谨慎!

    代码是:

    // Note:Your choice is C++ IDE
    #include <iostream>
    using namespace std;
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            int V,E,F;
            int s=0;
            for(int i=0;i<=n-2;i++)
            s+=i*(n-2-i);
            V=n+n*s/4;
            s=0;
            for(i=0;i<=n-2;i++)
            s+=(i*(n-i-2)+1);
            E=n+n*s/2;
            F=E-V+1;
            printf("%d\n",F);
        }
        
        return 0;
    }
  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/hsqdboke/p/2476128.html
Copyright © 2020-2023  润新知