标签:
http://acm.hdu.edu.cn/showproblem.php?pid=1249
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5619 Accepted Submission(s): 3826
我就是来水一水
证法1:
设n个三角形最多将平面分成an个部分。
n=1时,a1=2;
n=2时,第二个三角形的每一条边与第一个三角形最多有2个交点,三条边与第一个三角形最多有2×3=6(个)交点。这6个交点将第二个三角形的周边分成了6段,这6段中的每一段都将原来的每一个部分分成2个部分,从而平面也增加了6个部分,即a2=2+2×3。
n=3时,第三个三角形与前面两个三角形最多有4×3=12(个)交点,从而平面也增加了12个部分,即: a3=2+2×3+4×3。
……
一般地,第n个三角形与前面(n-1)个三角形最多有2(n-1)×3个交点,从而平面也增加2(n-1)×3个部分,故
an=2+2×3+4×3+…+2(n-1)×3
=2+〔2+4+…+2(n-1)〕×3
=2+3n(n-1)=3n^2-3n+2。
证法2:
1个三角形把平面分成2部分
第二个三角形和第一个三角形最多有6个交点,最多可以分成8个平面,增加了6个
第三个三角形和前两个三角形每一个最多都能有6个交点,一共多了2x6=12个交点,平面就能多2x6=12个
以此类推,第N个三角形可以把平面最多分成:
2+1x6+2x6+3x6+......+(n-1)x6
=2+6x(1+2+3+......+(n-1))
=2+3n(n-1)
看数据用longlong
1 #include<cstdio> 2 using namespace std; 3 int main() 4 { 5 int t, n; 6 scanf("%d",&t); 7 while(t--) 8 { 9 scanf("%d",&n); 10 long long l = 2+3*n*(n-1); 11 printf("%lld\n",l); 12 } 13 return 0; 14 }
标签:
原文地址:http://www.cnblogs.com/shanyr/p/4674391.html