TOJ 4689: Sawtooth

4689: Sawtooth 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 26            Accepted:8

Description

 

给予一条直线,最多可以将一个无限大平面分为两块,而两条直线,最多可以将平面分为4块。嘛,稍稍提升些难度,若给予n个拥有m个锯齿的图形,最多能将平面分为几个区域呢?

Input

 

多组测试数组。每组测试数据含有两个数m、n(1<=m<=10000,2<=n<=10000),分别代表锯齿个数和图形的个数。

Output

 

每组输出仅含一行一个数,代表最多能将平面分割的个数。

Sample Input

 

2 1
2 2

Sample Output

2
19

Hint

如图为1个拥有2个锯齿的图形,则在例中2个拥有2个锯齿的图形最多可以将平面分割为如下19块。

(注意锯齿状的图形外侧两边为射线,即无限长,其余边均为有限长)

作为一个喜(tao)欢(yan)几何的人,我很难想象自己怎么把这道题做出来了,我就是感觉挺有意思的,就如饥似渴地想找他的通项公式,HDOJ有一道类似的HDU - 5047,但是没我们这个需要处理的内容多,那个是个固定两个锯齿的。今天看到具体数学,无聊在翻,发现第一章就出现

答案类似物,我特么好像不用那么死命得推?其实本来我的想法也是直线相交-损失的空间,然后再根据n个锯齿来调整内容反正锯齿对应的数量级是2n^2的,直线是n^2/2(即n*(n-1)/2)发下标记下,给后人留个思考方式。推通项公式真的也没有想象的那么难,三项就差不多了,毕竟你知道第一项的数量级

#include <stdio.h>
int main()
{__int64 m,n;
while(~scanf("%I64d%I64d",&m,&n)){
    printf("%I64d
",(2*m*m)*n*n-(2*m*m-1)*n+1);
} 
    
    return 0;
}
原文地址:https://www.cnblogs.com/BobHuang/p/6843394.html