平面分割

C. 平面分割(surface) [ Discussion ]
Description
同一平面内有n(n≤500)条直线,已知其中p(p≥2)条直线相交于同一点,则这n条直线最多能将平面分割成多少个不同的区域?

Input
两个整数n(n≤500)和p(2≤p≤n)。

Output
一个正整数,代表最多分割成的区域数目。

Samples
Input Copy
12 5
Output
73
Discussions
No more discussions

More>>

下面介绍一个规律解法进行AC:
代码只有一行?
一个公式而已

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	int n,p;
	ll res; 
	cin>>n>>p;
	cout<<2*n+(n-p)*(p-1+n-2)/2;
	return 0;
}

那么这个公式怎么来的呢?
举例子!找规律!
拿出一张纸
画一个正方形
连起来对角线;
假设n=p=3;(从正方形中间画一条水平线,过对角线交点)
分成平面res=2x3=6;
n=3,p=2;
你把中间那条线往上移一下,让它满足p=2(两条线一个交点)
res=2x3+1;此时p=2;

假设n=p=4;
同样在n=3的基础上竖直过交点画一条线
res=2x4=8;
n=4,p=3;
移动一条(同上)
res=2x4+2=10;
n=4,p=2;
res=2x4+2+1=10+1;
到这应该能知道规律了吧?
是不是每一项都是上一项的res+此时的p-1?
n=4
p=4,res=2X4;
p=3,res=2X4+2;
p=2,res=2X4+2+1;

如果还看不出来,你就直接拿样例12 5去试一试;
n=12;
p=12,res=2x12;
p=11,res=2x12+10;
p=10,res=2x12+10+9;
p=9,res=2x12+10+9+8;

p=5,res=2x12+10+9+8+7+6+5+4=73;

所以我只需要求2xn+后面的等差数列就行了,后面不说了,自己动脑子吧!

另一种方法是f(n)=f(n-1)+n;
两种思维,第一种不好理解,去找第二种,第二种很多博客,所以此处介绍第一种。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值