土地问题(求出土地被分成多少面,有知识点)

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

分析:
1.最优方案不会让任何3条线段交于一点。
2.欧拉公式:V-E+F=2。其中,V是顶点数(即所有线段的端点+交点数),E是边数(即n段椭圆弧+这些线段被切成的段数),F是面数(即土地块数+椭圆外那个无穷大的面)。所以,只要求出V和E,F=E-V+1(减去无穷大的面)。
3.计算时枚举一条从固定点(所以最后要乘以n)出发的所有对角线。假设该对角线左边有i个点,右边有n-2-i(总点数-对角线两个端点-左边点数),则左右两边的点两两搭配后再这条对角线上形成了i(n-2-i)个交点,得到i(n-2-i)+1条线段(至于为什么我就不知道了。。)。然后每个交点被重复计算了4次(自己为对角线起点+自己为对角线终点+自己不是对角线时归于左边+自己不是对角线时归于右边),然后每条线段被重复计算了2次(对角线+非对角线)。所以得到公式:

这里写图片描述

#include<iostream>
using namespace std;
int main()
{
    int n,v=0,e=0,f,s=0; //V-E+F=2
    cin >> n;
    for(int i=0;i<=n-2;s=s+i*(n-2-i),i++);
    v=n+n*s/4;
    e=n+n*(s+n-1)/2;  
    f=1+e-v;
    cout << f << endl;
    return 0;
}    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值