因为原题有图,我就直接放链接了
原题链接
http://acm.hdu.edu.cn/showproblem.php?pid=2050
题意:中文题= =
思路:
1.先看N条直线相交最多能弄出多少个平面
当添加第N条直线的时候,要想弄出的平面最多,必须和前面的N-1条直线都相交,增加了N-1个交点(添加第3条直线的时候新增了2个交点),新增N个平面(自己画个图看看),也可以说成是 每增加N-1个交点,就增加N个平面。所以N条直线能弄出的平面数是: 1+1+2+3+...+N=1+(1+2+3+...+N)=N*(1+N)/2+1 (最前面的1是N=0时)
2.再看每次增加两条相互平行的直线能弄出多少个平面
第N次添加时,前面已经有2N-2条直线,所以,第2N-1条直线和第2N条直线添加时都各自增加 2*N-1个平面
所以第N次添加直线时的面数是 2*(2*N-1)=4*N-2
总的面数是:1+2+6+...+(4*N-2)=1+[ 2+6+...+(4*N-2) ]=2*N*N+1
3.把(2)中添加的平行线一端相交
平面数会减少一个,所以N条折线一共会减少N个平面
总平面数:2*N*N-N+1
AC代码:
#include<iostream> #include<stdio.h> using namespace std; int main() { int t,n; long long ans; cin>>t; while(t--) { cin>>n; ans=2*n*n-n+1; cout<<ans<<endl; } return 0; }