白书 5.4.4 多少块土地

此题初识欧拉公式 V - E + F = 2.

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

-------------------------------------------------------------------------------------------------------

有一块椭圆的地,你可以在边界上选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次,而每条线段被重新计算了2次。

//因为形成每个交点需要4个点两两组成2条线段相交于一点,需要2个点形成1条被分割的线段。

公式为

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

白书 5.4.4 多少块土地,布布扣,bubuko.com

时间: 2024-08-01 22:46:49

白书 5.4.4 多少块土地的相关文章

6.12白书第五章图论总结——司雨寒

之前我的图论一直都是DFS一下,BFS一下,求个欧拉回路,拓扑排个序这种渣渣水平. 终于鼓起勇气拾起白书第五章的东西. 学(bei)习(song)了一下求双连通分量,二分图的判定,强连通分量,2-SAT. DFS加上时间戳这个东西,很强大. 最后刷了白书上的例题: BCC: LA3523 可以参加会议的是双联通分量上的奇圈 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include

Uva10474-STL水题-白书

白书的一道水题.话说好久没认真做难题了.今天出了排名,所有队伍里倒数第一啊! 代码没什么可说的了. #include <algorithm> #include <cstring> #include <ctype.h> #include <cstdlib> #include <cstdio> #include <vector> #include <string> #include <queue> #include

白书 5.4.3 果园的里的树

果园里的树排列成矩阵.他们的x和y的坐标均是1~99的整数.输入若干个三角形,依次统计每个三角形内部和边界上共有多少棵树. 输入: 1.5  1.5       1.5  6.8      6.8  1.5 10.7  6.9     8.5  1.5      14.5  1.5 此题用三角形有向面积来解,求有向面积2倍的函数为: double area(double x0,double y0,double x1,double y1,double x2,double,y2) { return

白书 第九章 例 9.24 复制书稿 题解

题目解法: 题解 白书 第九章 例 9.24 复制书稿 题解,码迷,mamicode.com

分数化小数(decimal) 白书习题 2-5

1 /* 2 分数化小数(decimal) 白书习题 2-5 3 输入正整数 a , b , c , 输出 a/b 的小数形式,精确到小数点后 c 位 .a,b<=10^6 , c <= 100. 4 输入包含多组数据,结束标志为 a = b = c = 0 ; 5 */ 6 #include<stdio.h> 7 int main() 8 { 9 int a,b,c,y; //y用来存储 a/b 的余数 10 while(scanf("%d%d%d",&

la3523 白书例题 圆桌骑士 双联通分量+二分图

具体题解看大白书P316 #include <iostream> #include <algorithm> #include <vector> #include <string.h> #include <stack> #include <cstdio> using namespace std; struct Edge{int u,v;}; const int maxn = 1000+10; int pre[maxn],iscut[ma

白书 - 拓扑排序 及 关于递归、coding的一些思考

题目:有n个变量,m个二元组(u,v),表示变量u小于变量v.将所有变量从小到大排列,给出满足条件的一个. 思路:把"小于"关系看成有向边,得到一个有向图.任务就是把一个图的所有结点排序,使得每一条有向边(u,v)对应的 u 都排在 v 的前面.在图论中,这个问题称为拓扑排序topological sort.  不难发现:如果图中存在有向环,则不存在拓扑排序的解,反之则存在.我们把不包含有向环的有向图称为有向无环图(Directed Acyclic Graph,DAG). 以下是补充了

白书_倒三角形_C语言描述

#include<stdio.h> int main() { int n,t,i,j; scanf("%d",&n); for(i=0; i<=n-1; i++) { t = 2*n - 1- 2*i; for(j=0; j<i; j++) { printf(" "); } while(t) { printf("#"); t--; } printf("\n"); } return 0; }

(白书训练计划)UVa 11054 Wine trading in Gergovia(等价转换)

题目地址:UVa 11054 很巧妙的一道题,这题是利用的等价转换,对每一条路来说,假如右边生产的比左边的多x,那么不管起点是哪,终点是哪,都可以把左右两侧的看成两个点,要从这条路上运送x个劳动力.再由于总和是0,所以只需要算出一端的总和就可以,这样只要遍历一遍就可以算出来了.写出代码就很简单了... 代码如下: #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.