Tanky WooRSS

HDOJ 2068 RPG的错排

03 Aug 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

题目地址:

http://acm.hdu.edu.cn/showproblem.php?pid=2068


Accepted

2068

0MS

200K

1162 B

C++ 这题要注意优化,否则可能会超时。


 // Tanky Woo
// HDOJ 2068

#include 
using namespace std;

__int64 cuopai[30];
__int64 fun(int a, int b)
{
    __int64 result=1;
    if(a-b>b)
    {
        for(int i=a-b+1; i<=a; ++i)
            result *= i;
        for(int i=1; i<=b; ++i)
            result /= i;
    }
    else
    {
        for(int i=b+1; i<=a; ++i)
            result *= i;
        for(int i=1; i<=a-b; ++i)
            result /= i;
    }
    return result;

}
int main()
{
    cuopai[1] = 0;
    cuopai[2] = 1;
    cuopai[3] = 2;
    for(int i=4; i<=25; ++i)
        cuopai[i] = (i-1)*(cuopai[i-1]+cuopai[i-2]);
    int nNum;
    while(scanf("%d", &nNum;) && nNum)
    {
        if(nNum==1 || nNum==2 || nNum==3)
        {
            printf("1\n");
            continue;
        }
        __int64 sum = 0;
        for(int i=2; i<=nNum/2; ++i)
            sum += fun(nNum, i)*cuopai[i];
        sum += 1;
        printf("%I64d\n", sum);
    }
}