本文共 552 字,大约阅读时间需要 1 分钟。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2049
对于此类错排题目,首先要知道错排公式 a[i]=(i-1)*(a[i-1]+a[i-2]);
然后就是计算组合c(n,m),最后再求乘积,代码如下:
#includeusing namespace std;int main(){ int n,m,c; long long a[25]={0,0,1,2};//从有两队新婚夫妇时开始有一种情况 cin >> c; for(int i=4;i<25;i++) a[i]=(i-1)*(a[i-1]+a[i-2]); while(c--) { cin >> n >> m; long long sum1=1,sum2=1; for(int i=n-m+1;i<=n;i++) sum1*=i; for(int i=2;i<=m;i++) sum2*=i; cout << (sum1/sum2*a[m]) << endl; } return 0;}
转载地址:http://fpzgf.baihongyu.com/