HDU-2050

来源:互联网 发布:纸张分切软件 编辑:程序博客网 时间:2024/05/17 20:31

这题推起来还是能接受的,折线分割平面,应该从直线去推导折线的情况,而且直线分割平面是有现成公式可以用的

1条直线将平面分成 2 部分
2条直线将平面分成 4 = 2 + 2 部分
3条直线将平面分成 7 = 2 + 2 + 3 部分
4条直线将平面分成 11 = 2 +  2 + 3 + 4 部分

。。。

n条直线将圆分成 2+2+3+4+...+n = 1 + n(n+1)/2 (n>1)部分

(而一条折线是由两条直线构成的,然后去掉直线相交的另一部分)




由上边几幅图可以推导一个递推公式

即:分割的面积 = 直线分割面积 - 当前i值;

代码如下:

 

#include <cstdio>#include <iostream>using namespace std;const int max_size = 10005;int main(){    int arry[max_size*2] = {0, 2, 4, 7};///用arry[]存放直线分割平面的结果    for(int i = 4; i <= max_size*2; ++i)    {        arry[i] = arry[i-1] + i;    }    int t;    scanf("%d", &t);    while(t--)    {        int n;        scanf("%d", &n);        printf("%d\n", arry[n*2] - n*2);///分割的面积 = 直线分割面积 - 当前i值;    }    return 0;}

 

0 0