Uva--10790 (数学)

2014-06-08 20:13:27

题意&思路:题意不想赘述,引用一下http://www.cnblogs.com/xiaocai905767378/archive/2011/04/27/2030213.html

假设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时,结论成立。

#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;

int main(){
    int Case = 0;
    long long a,b;
    while(scanf("%lld %lld",&a,&b) == 2){
        if(a == 0 && b == 0)
            break;
        printf("Case %d: %lld\n",++Case,b * (b - 1) * a * (a - 1) / 4);
    }
    return 0;
}

 

posted @ 2014-06-08 20:16  Naturain  阅读(143)  评论(0编辑  收藏  举报