蓝桥杯平面分割

题目[P1512 - 蓝桥杯2020初赛] 平面分割 - New Online Judge (ecustacm.cn)

这个题比较难想,最好是结合画图来看

思路:

  • n个圆可以将一个平面分割为多少部分:
    除第一个圆外,每添加一个圆都会将平面额外分割2*(n-1)部分
    f(1) = 2
    f(2) = f(1) + 2 * (n - 1) = 4
    f(3)= 8
    f(n) = f(n - 1) + 2 * (n - 1)
    f(n) = f(n - 2) + 2 * (n - 2) + 2 * (n - 1)
    f(n) = 2 + 2 * 1 + 2 * 2 + … + 2 * (n - 1) = 2 + 2 * (1 + 2 + 3 + … + n - 1)
    = 2 + 2 * ((1 + n - 1) * (n - 1)) / 2
    = 2 + n * (n - 1);

  • m个直线可以将一个平面分割为几部分:
    除第一条直线外,每额外添加一条直线都会将平面额外分割n部分
    h(1) = 2
    h(2) = 4
    h(3) = 7
    h(n) = 2 + 2 + 3 + 4 … + n
    = 1 + (1 + n) * n / 2

  • n个圆和m个直线共可以将平面分为几个部分:
    n个圆0条线:g(n,0)=f(n)= 2 + n * (n - 1);
    n个圆1条线:这条直线可以分割它与所有圆交点个数个部分,每个圆可产生2个交点,也即增多2n个部分
    g(n,1)=2 + n * (n - 1)+2
    n;
    n个圆2条线:第二条线同样可以产生2n个部分,除此之外还将与第一条直线相交分割一个部分
    g(n,2)=g(n,1)+2
    n+2
    g ( n , m ) = 2 + n ∗ ( n − 1 ) + 2 ∗ n ∗ m + ( 2 + m ) ∗ ( m − 1 ) / 2 g(n,m)=2+n*(n-1)+2*n*m+(2+m)*(m-1)/2 g(n,m)=2+n(n1)+2nm+(2+m)(m1)/2

#include<map>
#include<queue>
#include<cmath>
#include<string>//使用to_string必须加该头文件
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long 
#define itn int
const int array_size = (int)1e6 + 50;
const int INF = 0x3f3f3f3f;
using namespace std;
/*
n个圆可以将一个平面分割为多少部分:
除第一个圆外,每添加一个圆都会将平面额外分割2*(n-1)部分
f(1) = 2
f(2) = f(1) + 2 * (n - 1) = 4
f(3)= 8
f(n) = f(n - 1) + 2 * (n - 1)
f(n) = f(n - 2) + 2 * (n - 2) + 2 * (n - 1)
f(n) = 2 + 2 * 1 + 2 * 2 + ... + 2 * (n - 1) = 2 + 2 * (1 + 2 + 3 + ... + n - 1)
= 2 + 2 * ((1 + n - 1) * (n - 1)) / 2
= 2 + n * (n - 1);

m个直线可以将一个平面分割为几部分:
除第一条直线外,每额外添加一条直线都会将平面额外分割n部分
h(1) = 2
h(2) = 4
h(3) = 7
h(n) = 2 + 2 + 3 + 4 ... + n
= 1 + (1 + n) * n / 2

n个圆和m个直线共可以将平面分为几个部分:
n个圆0条线:g(n,0)=f(n)= 2 + n * (n - 1);
n个圆1条线:这条直线可以分割它与所有圆交点个数个部分,每个圆可产生2个交点,也即增多2*n个部分
g(n,1)=2 + n * (n - 1)+2*n;
n个圆2条线:第二条线同样可以产生2*n个部分,除此之外还将与第一条直线相交分割一个部分
g(n,2)=g(n,1)+2*n+2
g(n,m)=2+n*(n-1)+2*n*m+(2+m)*(m-1)/2
*/
int main()
{
	int m = 20, n = 20;
	cout << 2 + n * (n - 1) + 2 * n * m + (2 + m) * (m - 1) / 2 << endl;
	return 0;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值