牛客小白月赛5F圆的公式推导 组合数 欧拉公式

题目大意
一个圆上有n个点,在n个点中间两两连边,求最多产生多少个区域?
视频讲解:
3B1B视频讲解
力推3B1B视频
思路:
首先在圆上去n个点,
要是n个点产生的区域数最大,
就必须是任意3条直线不交于一点。
也就是园内任意一点最多只有两条直线经过。
在圆上的n个点会连出C(n,2)条直线。
任意一个圆内交点都可以有圆上四点构成的四元组唯一对应,
那么无序四元组的个数为C(n,4),也是交点个数。
如果把圆看成一张图(圆弧也是边),
点由直线交点和圆上的点构成,
直线交点数量为C(n,4),圆上交点数量为n。
那么点数有n+C(n,4)。
边由圆弧和直线上被交点分割成的若干小段构成,
圆弧数量为n,
有n条直线,m个交点。
考虑每增加一个交点,就会产生新边数量为2(自己画图YY一下)
原来有n条直线,有n条边,
每有一个交点,就会使其中两条直线上的边数加2,
m个交点,就加了2m条边,所以总共n+2m条边。
被分割成的若干边的数量为C(n,2)+2C(n,4)。
边数有C(n,2)+2C(n,4)+n。
根据欧拉公式F-E+V=2(二维和三维一样适用)有
F:面数(区域数)E:边数 V:点数
E=C(n,2)+2C(n,4)+n
V=n+C(n,4)。
F=E-V+2
=C(n,4)+C(n,2)+2
扣掉圆外区域
答案为C(n,4)+C(n,2)+1
复杂度 O(1)
内容板块
数学:组合数
图论:欧拉公式
#include<cstdio>
#include<algorithm>
#include<iostream>
int n;
int main(){
    while(~scanf("%d",&n))
        cout<<1+1ll*n*(n-1)/2+1ll*n*(n-1)/2*(n-2)/3*(n-3)/4<<endl;
    return 0;
}

全部评论
大佬,边数公式:C(n,2)+2C(n,4)+n,求解释下2C(n,4)怎么得到的
点赞 回复 分享
发布于 2018-07-26 07:42
这个是以前做过的原题吗,我怎么记得这个公式有点眼熟啊
点赞 回复 分享
发布于 2018-12-16 12:23

相关推荐

不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 12:10
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务