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连接没有交点,与A2有1个交点,与A3连接有2个交点,……,与Ab有b-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; }