杭电oj——2050折线分割平面

因为原题有图,我就直接放链接了

原题链接

http://acm.hdu.edu.cn/showproblem.php?pid=2050

题意:中文题= =

思路:

1.先看N条直线相交最多能弄出多少个平面

当添加第N条直线的时候,要想弄出的平面最多,必须和前面的N-1条直线都相交,增加了N-1个交点(添加第3条直线的时候新增了2个交点),新增N个平面(自己画个图看看),也可以说成是 每增加N-1个交点,就增加N个平面。所以N条直线能弄出的平面数是: 1+1+2+3+...+N=1+(1+2+3+...+N)=N*(1+N)/2+1     (最前面的1是N=0时)


2.再看每次增加两条相互平行的直线能弄出多少个平面


第N次添加时,前面已经有2N-2条直线,所以,第2N-1条直线和第2N条直线添加时都各自增加  2*N-1个平面

所以第N次添加直线时的面数是 2*(2*N-1)=4*N-2

总的面数是:1+2+6+...+(4*N-2)=1+[ 2+6+...+(4*N-2) ]=2*N*N+1


3.把(2)中添加的平行线一端相交


平面数会减少一个,所以N条折线一共会减少N个平面

总平面数:2*N*N-N+1

AC代码:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int t,n;
    long long ans;
    cin>>t;
    while(t--)
    {
        cin>>n;
        ans=2*n*n-n+1;
        cout<<ans<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wenen_/article/details/55193966