uva10790

来源:互联网 发布:销售新人被辞退 知乎 编辑:程序博客网 时间:2024/06/06 01:49

/*

虽然这道题不是很难,还是wa了一次,以前没用过longlong型的数据啊!!但这题还是令人长自信,因为我的推理过程没用到任何高深的数学公式、定理等等

题目大意

给定2条平行的直线,分别有a,b个点,且不在同一条直线上的任意两点连线没有三线相交于一点。给出a,b,求他们共有多少个交点。

做法是:

一:

将a第1个点与b第b个点相连,可知有(b-1)*(a-1)个点与之相交;

将a第1个点与b第b-1个点相连,可知有(b-2)*(a-1)个点与之相交;

将a第1个点与b第b-2个点相连,可知有(b-3)*(a-1)个点与之相交;

。。。

二:

将a第2个点与b第b个点相连,可知有(b-1)*(a-2)个点与之相交;

将a第2个点与b第b-1个点相连,可知有(b-2)*(a-2)个点与之相交;

将a第2个点与b第b-2个点相连,可知有(b-3)*(a-2)个点与之相交;

。。。

三:

将a第3个点与b第b个点相连,可知有(b-1)*(a-2)个点与之相交;

将a第3个点与b第b-1个点相连,可知有(b-2)*(a-2)个点与之相交;

将a第3个点与b第b-2个点相连,可知有(b-3)*(a-3)个点与之相交;

。。。

。。。。。。。。。。。

观察规律可知一共有b*(b-1)*/2*a*(a-1)/2个点

他山之石:::

某一人:

这道题让我联想到了欧拉公式:V-E+F=2,V(顶点总数),E(线段总数),F(总面数(包括外面无限大的区域)),不过是欧拉公式的变形,呵呵。

某二人:

假设f(a,b)表示它们有多少交点。

     结论:f(a,b)=a(a-1)b(b-1)/4

     可以利用数学归纳法证明。

      首先,a=1时,f(1,b) = 0 . a=2 时,计算f(2,b),如图所示,L1有两点,P1,P2;L2上有A1、A2、A3、……Ab 共b个点,先连接P1A1、P1A2、P1A3、……、P1Ab。另一点P2再与A1连接没有交点,与A21个交点,与A3连接有2个交点,……,与Abb-1个交点。

       由加法原理得出:f(2,b)=0+1+2+……+b-1=b(b-1)/2

        设a=k时,上式成立,即f(k,b) = b(b-1)/2 *a(a-1)/2=a(a-1)b(b-1)/4

        对于a=k+1,第k+1个点与b个点连接,得到点为:

        0+k+2k+…+(b-1)k=k(0+1+2+...+(b-1) )=kb(b-1)/2

         则f(k+1,b)=kb(b-1)/2+b(b-1)k(k-1)/4=b(b-1)k(k+1)/4

         即当n=k+1时,结论成立。

由此联想到:

两平行线间的三角形个数

( 1 ) 三角形个数 1

   如果线上有n个点,直线外一点连接这线上所有点,求图中有多少个三角形。


     设三角形个数为f(n),则:

      f(1)=0

      f(2)=0+1=1

      f(3)=1+2=3

      f(4)=1+2+3=6

             ……

       f(n)=0+1+2+3+...+n-1 = n(n-1)/2

      结论:f(n)=n(n-1)/2

(2) 三角形个数 2

    如图,两条平行的直线上分别有m,n个点,求m+n个点两两连接后最多可以构成多少个三角形。


由(1)显然可知,g(m,n) = f(n) + f(m)

                                       = mn(n-1)/2 + nm(m-1)/2

                                       = mn(m+n-2)/2

即三角形个数为 g(m,n) = mn(m+n-2)/2 

*/

#include<stdio.h>
int main()
{
 long long a,b;
 int n=1;
 while(scanf("%lld%lld",&a,&b)!=EOF&&(a||b))
 printf("Case %d: %lld\n",n++,b*(b-1)*a*(a-1)/4);
 return 0;
}

0 0
原创粉丝点击