折线分割平面

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

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

分析:

先看N条相交的直线最多能把平面分割成多少块

当添加第N条只显示,为了使平面最多, 则第N条直线要与前面的N-1条直线都相交,且没有任何三条直线教育一个点。

则第N条直线有N-1个交点。由于每增加N个交点,就增加N+1个平面,所以用N条直线来分隔平面,最多的数是1+1+2+3+…+n=1+n*(n+1)/2;

再看每次增加两条相互平行的直线

当第N次添加时,前面已经有2N-2条直线了,所以第N次添加时,第2N-1条直线和第2N条直线都各能增加2*(n-1)+1 个平面。

所以第N次添加增加的面数是2[2(n-1) + 1] = 4n - 2 个。因此,总面数应该是

1 + 4n(n+1)/2 - 2n = 2n2 + 1

如果把每次加进来的平行边让它们一头相交

则平面1、3已经合为一个面,因此,每一组平行线相交后,就会较少一个面,

所以所求就是平行线分割平面数减去N,为2n2 -n + 1

利用上述总结公式f(n)=2n2 -n + 1

#include<stdio.h>

int main()

{

int T,n;

scanf("%d",&T);

while(T--&&scanf("%d",&n)!=EOF)

printf("%d\n",2*n*n-n+1);

return 0;

}

或者利用公式f(n)=f(n-1)+4*(n-1)+1

#include<stdio.h>

int main()

{

__int64 s[10001];

int i,T,n;

scanf("%d",&T);

while(T--)

{

s[0]=1;

scanf("%d",&n);

for(i=1;i<=n;i++)

s[i]=s[i-1]+4*(i-1)+1;

printf("%I64d\n",s[i-1]);

}

return 0;

}

HDU 2050 折线分割平面(转)的更多相关文章

  1. hdu 2050:折线分割平面(水题,递归)

    折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  2. HDU 2050 折线分割平面 (数学)

    题目链接 Problem Description我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可 ...

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

    折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

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

    折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. HDU - 2050 - 折线分割平面(数学 + dp)

    题意: 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分 思路: 记住结论.. ...

  6. hdu 2050 折线分割平面 dp递推 *

    折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  7. HDU 2050 折线分割平面 (递推)

    题意:略. 析:多写几个就找到规律了,第1条是2,2条时是7个,3条时是16,4条时是29,.... 那么规律就出来了2 * n * n + 1 - n; 也可以递推,第n条折线的两条边都与前n-1条 ...

  8. hdu 2050 折线分割平面

    训练递推用题,第一次做这个题,蒙的,而且对了. #include <stdio.h> int main(void) { int c,a; scanf("%d",& ...

  9. hdoj 2050 折线分割平面

    折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

随机推荐

  1. [Leetcode] n queens ii n皇后问题

    Follow up for N-Queens problem. Now, instead outputting board configurations, return the total numbe ...

  2. MySQL使用笔记(四)数据的操作

    By francis_hao    Dec 14,2016 数据的操作包括插入数据记录.更新数据记录和删除数据记录. 插入数据记录 插入单条数据记录 field表示的字段名和value表示数据要一一对 ...

  3. bzoj 5094 [Lydsy1711月赛]硬盘检测 概率dp

    [Lydsy1711月赛]硬盘检测 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 273  Solved: 75[Submit][Status][Dis ...

  4. x:Class, x:Key

    x:Class: 用来创建一个partial的class, 比如默认生成的x:Class="MyTest.MainWindow", 会自动生成一个MainWindow的partia ...

  5. MyBatis对象关联关系----多对多的保存与查询

    模拟情景: 对象:学生,课程 关系:一个学生可选多个课程,一门课程可被多个学生选择 一.保存 1.创建数据库表,student,course,student_course,其中student_cour ...

  6. Lesson 3

    1.关于面向对象的三个重要属性  Encapsulation(封装):无法直接访问类的成员变量,而是通过一些get set方法,间接访问数据域: Polymorphism(多态):静态绑定,动态绑定, ...

  7. [洛谷P1032] 字串变换

    洛谷题目链接:字串变换 题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B ...

  8. 正式进入搭建OpenStack

    部署mariadb数据库 控制节点: yum install mariadb mariadb-server python2-PyMySQL -y 编辑: /etc/my.cnf.d/openstack ...

  9. 优化IDEA启动速度,快了好多。后面有什么优化点,会继续往里面添加

    1.优化启动 修改bin/idea.exe.vmoptions文件如下: -Xms256m   初始堆大小-Xmx384m   最大堆大小 -XX:+UseParNewGC   使用并行收集算法 2. ...

  10. 【LibreOJ】【LOJ】#6217. 扑克牌

    [题意]给定一叠n张扑克牌和各自的ai,bi.每次可以从最上面拿走连续atop张并获得btop的价值,或是把top放到最底,求最大价值. [算法]背包DP [题解]本题最大的特点:atop的需求与牌的 ...