现在的位置: 首页 > 综合 > 正文

UVALive 6469 Deranged Exams

2018年01月11日 ⁄ 综合 ⁄ 共 420字 ⁄ 字号 评论关闭

排列组合 容斥原理

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
ll A(int n){
    ll r = 1;
    for(int i = 1;i <= n;i++){
        r *= i;
    }
    return r;
}
ll C(int n,int k){
    return A(n)/(A(n - k) * A(k));
}
int main(){
    int t;
    while(~scanf("%d",&t)){
        while(t--){
            int p,n,k;
            scanf("%d%d%d",&p,&n,&k);
            printf("%d ",p);
            ll sum = 0;
            for(int i = 1;i <= k;i++){
                if(i&1)sum += C(k,i) * A(n - i);
                else sum -= C(k,i) * A(n - i);
            }
            //cout<<sum<<endl;
            printf("%lld\n",A(n) - sum);
        }
    }
    return 0;
}

抱歉!评论已关闭.