hdu1249(三角形划分区域,直线划分区域,折线划分区域)

题目链接:三角形

题目大意:中文题目

分析:

递推

1、一条线段和一条射线都可以将平面分成两个部分

2、折线的端点处只能将平面分成一个部分


一、首先考虑直线的情况


      如上图,一条直线将一个平面分成两个,两个平面分成4个,当加入第三条直线时,与前两条直线产生了两个交点,将第三条直线分成了1条线段和两条射线,将原有的区域一分为二,增加了3个区域。

     递推规律如下:

     假设对前n-1条直线有f(n-1)个区域

       当增加1条直线的时候,增加了n-1个交点,这n-1个交点产生了n-2条线段和2条射线。

      增加了n-2+2=n个区域

      于是f(n)=n+f(n-1)

      得发f(n)=(n+2)*(n-1)/2+2


二、考虑折线的情况


如图,当只有一条直线的时候,将平面划分为两个区域

如右图,加上第n条折线时,第n条折线的每条射线分别和前n-1条折线相交,即和前2(n-1)条射线相交,增加了2(n-1)个交点,即增加了2(n-1)条线段和一条射线

注意现在暂时不算蓝色折线交点,因为折线的交点值增加一个区域,即增加了2(n-1)-1条线段和1条射线,共增加了2(2(n-1))个区域

最后在加上第n条折线自带的交点,即途中蓝色节点所增加的区域:1

即增加了2(2(n-1))+1个区域

递推方程为f(n)=4n-3+f(n-1),f(1)=2


三、考虑线段的情况


如图,当只有一个三角形时,划分为2个区域

当加上第n个三角形时,每条边最多与前n-1个三角形,即3*(n-1)个线段相交,如图,运用第2个部分的结论,但是此时是增加了2(n-1)-1条线段和2条蓝色顶点带来的线段,共增加了3(2(n-1)-1)个区域,再加上3个蓝色定点,共增加了6(n-1)个区域

所以递推方程为f(n)=6*(n-1)+f(n-1),f(1)=2



代码

#include <stdio.h>

int main()
{
    //freopen("in.txt","r",stdin);
    int T,n;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        printf("%d\n",3*n*(n-1)+2);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值