错排: int main() { long long mul[21]={1,1,2}; long long d[21]={0,0,1}; for(int i=3;i<=20;i++) { mul[i]=mul[i-1]*i; //错排递推式 d[i]=(i-1)*(d[i-1]+d[i-2]); // cout<<"i:"<<mul[i]<<' '<<d[i]<<endl; } int t,n,m; cin>>t; while(t--) { cin>>n>>m; //控制数据范围的一个方法,调整计算顺序! cout<<mul[n]/mul[m]/mul[n-m]*d[m]<<endl; //一个超出范围的计算顺序! //cout<<d[m]*mul[n]/(mul[m]*mul[n-m])<<endl; } return 0; }