1412201059-hd-折线分割平面

折线分割平面

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 18059    Accepted Submission(s): 12420

Problem Description

我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。

Input

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

Output

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

Sample Input

2
1
2

Sample Output

2
7

解题思路

可将每个折线看成是两条直线,但是少了一半。因此每一条折线比两条直线分割的面的部分少2。因此n条折线比2n条直线分割平面形成的部分少2n。

初始代码

#include<stdio.h>
int a[21000];
int main()
{
	int t,n;
	int i,j,k;
	a[1]=2;
	a[2]=4;//a[2]=a[1]+2=a[2-1]+2
	a[3]=7;//a[3]=a[2]+3=a[3-1]+3
	for(i=4;i<=20000;i++)
	    a[i]=a[i-1]+i;
	/*可将每个折线看成是两条直线,但是少了一半。
      因此每一条折线比两条直线分割的面的部分少2。
	  因此n条折线比2n条直线分割平面形成的部分少2n。*/
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		printf("%d\n",a[2*n]-2*n);
	}
	return 0;
}

优化:

因为a[i]=a[i-1]+i;

a[i-1]=a[i-2]+i-1;

a[i-2]=a[i-3]+i-2;

...

a[i-(i-2)]=a[i-(i-2)-1]+i-(i-2);

a[i]=a[i-(i-2)-1]+2+...+i;

a[i]=a[1]+2+...+i;

又因为a[1]=2;

a[i]=2+2+...+i;

a[i]=1+1+2+...+i;

a[i]=1+(i+1)*i/2;

所以f(n)=(1+2*n)*2*n/2+1-2*n

=2*n*n-n+1;

优化后代码:

#include<stdio.h>
int main()
{
	int t,n;
	int i,j;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		printf("%d\n",2*n*n-n+1);
	}
	return 0;
}

时间: 2024-11-03 21:56:42

1412201059-hd-折线分割平面的相关文章

折线分割平面(递推)

折线分割平面 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示. Input 输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量. Output 对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行. Sample Input 2 1

[hdu-2050] 折线分割平面

折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15796    Accepted Submission(s): 10897 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平

hdu 2050 折线分割平面(递推公式)

折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 29965    Accepted Submission(s): 20289 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面

hdoj 2050 折线分割平面 【几何模板】

折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17229    Accepted Submission(s): 11890 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平

HDU2050离散数学折线分割平面

折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24505    Accepted Submission(s): 16644 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面

折线分割平面(杭电2050)(递归的几种类型,数学推导)

折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17706    Accepted Submission(s): 12192 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平

hdu 2050 折线分割平面 (递推)

折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15709    Accepted Submission(s): 10836 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面

D - 折线分割平面

Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示.  Input 输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量. Output 对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行. Sample Input 2 1 2 Sample Outpu

直线,椭圆,三角形,折线分割平面问题

直线,椭圆,三角形,折线分割平面问题:直线分割平面:S(n)=S(n-1)+n;S(n)=1+n*(n-1)/2;椭圆分割平面:S(n)=S(n-1)+2*(n-1);S(n)=2+n*(n-1);三角形分割平面:S(n)=S(n-1)+6*(n-1);S(n)=3*n*(n-1)+2;折线分割平面:S(n)=2*n*n-n+1;

HDU2050 折线分割平面【递推】【计算几何】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2050 题目大意: 求N条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线 最多可以将平面分成7部分,具体如下所示. 思路: 直线分割平面时,每增加N个结点,增加N+1个面.设f(N)是N条直线所能分成最多个面的个数. 则f(N) = f(N-1) + N,且f(1)= 2,推得:f(N) = N*(N+1)/2+1.当N为折线节点时, L(N) = f(2*N) - 2*N.因