LHL ACM CLUB NEUQ OJ #1017 平面切割(特别版)

平面切割(特别版)
NEUQer14209071 Sec128 MB
描述数据评测
题目描述
我们要求的是n条闪电型折线分割平面的最大数目。比如,一条闪电型折线可以将平面分成两部分,两条最多可以将平面分成12部分,三条最多可将平面分成31部分,四条最多则可将一个平面分为59部分。

输入描述
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0

输出描述
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。

样例输入
3
1
2
3
样例输出
2
12
31
提示
注意用递归的方式找到数学公式哦~


主要是数学公式的总结;

n=0,f=1;

n=1,f=2;

n=2,f=12;

n=3,f=31;

每条闪电形的折线的每个线段都要穿过前面所有闪电形折线的全部三条线段。
LHL ACM CLUB NEUQ OJ #1017 平面切割(特别版)_第1张图片

如n=2的时候:

一共12个平面。

讨论一下交点的个数变化,

当n=2,第二条折线出现时,就是用闪电形的折线的每个线段穿过前面闪电形折线的全部3条线段。这样的话,交点的个数就会增加3*3个;

当n=3,第二条折线出现时,就是用闪电形的折线的每个线段穿过前面闪电形折线的全部6条线段。这样的话,交点的个数就会增加3*6个;

当n=4,第二条折线出现时,就是用闪电形的折线的每个线段穿过前面闪电形折线的全部9条线段。这样的话,交点的个数就会增加3*9个;

交点的个数与平面的个数有关系,可以看出,平面增加的个数是交点增加的个数+1:

故公式为:f[i]=f[i-1]+3*(3*(i-1))+1;

化简得:f[i]=f[i-1]+9*i-8;


#include 
using namespace std;
int f[10010]; 
int main()
{
     
    f[0]=1;
    for(int i=1;i<10001;i++){
     
        f[i]=f[i-1]+9*i-8;
    }
    int T;
    cin>>T;
    while(T--){
     
        int a;
        cin>>a;
        cout<<f[a]<<endl;
    }
    return 0;
}

你可能感兴趣的:(ACM,CLUB,NEUQ,OJ,算法,数据结构,c++,c)