组合数学模板
int anr(int n,int r) { //求n的r排列 int res=1; for(int i=0;i<r;i++) res*= n-i; return res; } int cnr(int n,int r) { //求n的r组合 int res = anr(n,r); for(;r;r--) res /= r; return res; } //{1,2,3,--,n}的r组合a[i](i=1 to r)在其所有r组合中的字典序号 int c_lexorder(int *a,int n,int r) { int res = cnr(n,r); for (int i = 0; i < r; ++i) { res -= cnr(n-a[i],r-i); } }