折线分割平面

柔情只为你懂 2022-05-28 03:25 352阅读 0赞
  1. /*
  2. 这里我给大家推导以下递推公式的推导步骤:
  3. 上面看到了两条折线 和三条折线的画法,
  4. 我们先来考虑以下两条折线的画法,同样是两条折线为什么图二的就比图一的要多呢,
  5. 我们这里仔细的分析以下两个图的不同,经过观察,
  6. 不难发现,图二的交点比图一的交点多了两个,那是不是这个原因呢?回答是当然!
  7. 那么问题又来了 交点的数目与分割的数量的增加有关系么?
  8. 回答仍然是当然!那么交点数目与分割的数量到底有什么关系呢?我们再来看看图。
  9. 经过观察,你可以发现,如果在相邻的两个线段(或者射线)上任选取两个点,
  10. 将这两点连线,那么原来的一个区域就会多被分割出来一个。
  11. 所以每次所有的交点的之间的区域的数量的增加量就为(交点的数量 - 1) ,
  12. 那么交点的数量的增加量到底是多少呢?因为是一个折线(在这里我们可以将其近似考虑成两条直线),
  13. 下面大家考虑以下“一条直线与n条直线能有几个交点?"答案必然是n个 ,
  14. 所以当一个折线就可以形成2*n(这里的n表示的是n条直线,
  15. 所以对于原题的来说一条折线与n条折线的交点数目就为 2*(2*n))个交点,
  16. 所以第n条折线所有交点间比第n-1的折线的区域数量增加了4*(n-1) - 1 (交点的数量 - 1 )块,
  17. 另外需要注意的是,这是一条折线,所以当与其他的线相交过后必然会在其两端都形成一条射线,
  18. 这两条射线也是能够将区域分割开的,所以分割的增加量除了前面交点形成的增加量意外,
  19. 还有这两个射线的增加的 2 块。
  20. 所以就有f(n) = f(n-1) + 4 * (n-1) - 1 + 2;
  21. 化简的 f(n) = (n-1) + 4 * n - 3;
  22. */
  23. #include<stdio.h>
  24. typedef long long ll;
  25. ll a[10050]={1,2,7};
  26. ll f(ll n)
  27. {
  28. if(n<=2)
  29. {
  30. return a[n];
  31. }
  32. else
  33. {
  34. a[n]=f(n-1)+4*(n-1)-1+2;
  35. }
  36. return a[n];
  37. }
  38. int main()
  39. {
  40. int c;
  41. ll n;
  42. while(scanf("%d",&c)!=EOF)
  43. {
  44. while(c--)
  45. {
  46. scanf("%lld",&n);
  47. printf("%lld\n",f(n));
  48. }
  49. }
  50. return 0;
  51. }

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读

    相关 折线分割平面

    Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成

    相关 java折线分割平面

    Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成

    相关 折线分割平面

    / 这里我给大家推导以下递推公式的推导步骤: 上面看到了两条折线 和三条折线的画法, 我们先来考虑以下两条折线的画法,同样是两条折线为什么