Please enable java script to visit.
NOTEBOOK
HOMEPHP / MySQLJS / HTMLWXappPythonC++Blender其他
递推作业:【基础】平面分割(II) - NOTEBOOK
递推作业:【基础】平面分割(II)
C++
Posted on 2023-08-19
摘要 : 题目逻辑分析:以经过同一点的p条直线开始,将平面划分为 2*p 个区域。如果想要切割的区域越多,那后面每增加一条直线,都需要跟之前每一条直线都相交。而且每次增加的区域,都等于增加后的直线总和。
❱ 描述

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

❱ 输入描述

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

❱ 输出描述

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

❱ 用例输入

12 5


❱ 用例输出

73


❱ 解析

以经过同一点的p条直线开始,将平面划分为 2*p 个区域。如果想要切割的区域越多,那后面每增加一条直线,都需要跟之前每一条直线都相交。而且每次增加的区域,都等于增加后的直线总和。

#include<iostream>
using namespace std;
int main() {

int n,p;
cin>>n>>p;

int sum=p*2;

for(int i=p+1;i<=n;i++){
sum+=i;
// cout<<sum<<endl;
// if(sum==73)cout<<i<<"---"<<endl;
}
cout<<sum;
return 0;
}



#include <iostream>
using namespace std;

int n, p, f[510];

int main() {
cin >> n >> p;
f[p] = 2 * p;
for(int i = p + 1; i <= n; i++) {
f[i] = f[i - 1] + i;
}
cout << f[n];

return 0;
}