UVA_2533 Chess Queen(math)

来源:互联网 发布:开微店好还是淘宝店好 编辑:程序博客网 时间:2024/05/19 13:17

题目请点我
题解:
数学题,注意四角边上还有从大到小的一些对角线,需要用公式去求。另外学到一种求组合数的方法,利用的是杨辉三角的概念;
代码实现:

#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#define MAX 1000010#define LL long longusing namespace std;LL M,N;LL result;LL get_volue(LL len);int main(){    while( scanf("%lld%lld",&M,&N) ){        if( M == 0 && N == 0 ){            break;        }        if( M < N ){            swap(M,N);        }        result = 0;        result += N*get_volue(M);        result += (3*M-2*N+2)*get_volue(N);        //result += 2*(M-N+1)*get_volue(N);        result += 2*((N-2)*(N-1)*(2*N-3)/6+(N-1)*(N-2)/2);        result *= 2;        printf("%lld\n",result);    }    return 0;}LL get_volue(LL len){    LL tmp = 1;    if( len == 1 )        return 0;    if( len == 2 ){        return len/2;    }    tmp = len*(len-1);    return tmp/2;}////LL C[MAX][MAX];//for( int i =0; i < MAX; i++ ){//    C[i][0] = C[i][i] = 1;//    for( int j = 1; j < i; j++ ){//        C[i][j] = C[i-1][j-1]+C[i-1][j];//    }//}
0 0