排列组合 容斥原理
#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; }