帮我解下这个程序

来源:百度知道 编辑:UC知道 时间:2024/05/26 07:27:29
安排方法总数

Description

Eddie是CBJ软件公司的人事经理。最近公司准备完成一个大型软件,总裁要求Eddie从n个职工中选择p个,安排在一起工作。
但棘手的问题出现了。
Eddie发现某些职工之间闹矛盾,如果将他们安排在一起会大大影响工作效率。Eddie把职工依次编号为1,2,…,n,他发现:
1和2之间有矛盾,2和3之间有矛盾,……,i和i+1之间有矛盾,……,n-1和n之间有矛盾。
为了提高工作效率,Eddie决不能将闹矛盾的职工安排在一起。因此,他很想知道可能的安排方法总数。请你编程帮助他。

Input

包括一行只有两个整数:n,p
( 2*p<=n , 1 <= n <= 10000 )

Output

包括一行只有一个正整数:即可能的方法总数。
若方法总数的位数大于99位,则只输出结果的后99位。

Sample Input

11 3

Sample Output

84
pascal!!!!!!!!!别超时啊,10000-5000的数据就会超时了!!!!!!!!!
特别注意要pascal!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

/*
Name: 安排方法总数
Copyright: anyone
Author: hxd_yi
Date: 08-11-08 11:10
Description:
Eddie是CBJ软件公司的人事经理。最近公司准备完成一个大型软件,总裁要求Eddie从n个职工中选择p个,安排在一起工作。
但棘手的问题出现了。
Eddie发现某些职工之间闹矛盾,如果将他们安排在一起会大大影响工作效率。Eddie把职工依次编号为1,2,…,n,他发现:
1和2之间有矛盾,2和3之间有矛盾,……,i和i+1之间有矛盾,……,n-1和n之间有矛盾。
为了提高工作效率,Eddie决不能将闹矛盾的职工安排在一起。因此,他很想知道可能的安排方法总数。请你编程帮助他。
*/

#include <iostream>

using namespace std;

class BigInt
{
private:
static const int maxl=5000;
int a[maxl];
int l;
public:
BigInt(int x);
int mul(int x);
int div(int x);
int show();
};

int main()
{
int n,p;
cin>>n>>p;
BigInt ans(1);
for(int i=1;i<=p;++i){
ans.mul(n-p+2-i);
ans.div(i);
}
ans.show();
return 0;
}

BigInt::BigInt(int x)