码迷,mamicode.com
首页 > 其他好文 > 详细

【NEUQACM OJ】1017: 平面切割(特别版)

时间:2016-06-05 18:37:49      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

1017: 平面切割(特别版)

 

题目描述

我们要求的是n条闪电型折线分割平面的最大数目。比如,一条闪电型折线可以将平面分成两部分,两条最多可以将平面分成12部分,三条最多可将平面分成31部分,四条最多则可将一个平面分为59部分。

输入

输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。

输出

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

样例输入

3
1
2
3

样例输出

2
12
31

提示

 

注意用递归的方式找到数学公式哦~

 

 

一致的数据比较多,而且题目提示用递归数学公式,也就是数学上的递推公式;

我们来分析下,已知的几组数组        

     闪电星折线   为 n=1 时  平面被分成C=2 份

技术分享  

n=2   C=12  情况

 

技术分享

 

有前两组数据,及几何图形,可推知,n每增加1,C的增加跟n正相关,即每次C的增加数量是在前一次C值的基础上增加特定的值,即前后两项无倍数关系

下面假设  递推公式  C[i]=C[i-1];

 

下面来代入题目中给的 数据

n=2;

C[2]=C[1]=2       而实际C[2]=12;  前者少1*10-0;

 

n=3;

C[3]=C[2]=12     而实际C[3]=31;   前者少2*10-1;

  

n=4;

C[4]=C[3]=31     而实际C[4]=59;   前者少3*10-2;

 

.

.

.

.

 

很容易得到正确的递推公式为C[i]=C[i-1]+10*(i-1)-(i-2);

递推公式出来了,下面贴代码:

 

 1 #include<iostream>
 2 using namespace std;
 3 int a[10001];
 4 void list()
 5 {
 6     a[1]=2;
 7     for(int i=2;i<=10000;i++)
 8     {
 9         a[i]=a[i-1]+(i-1)*10-(i-2);
10     }
11 }
12 int main()
13 {
14     int n,N;
15     cin>>N;
16     list();
17     while(N--)
18     {
19         cin>>n;
20        cout<<a[n]<<endl;
21     }
22     
23     return 0;
24  } 

 2016-06-05-17:51:21

【NEUQACM OJ】1017: 平面切割(特别版)

标签:

原文地址:http://www.cnblogs.com/dearvee/p/5561258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!