#include <iostream>#include<cstring>#include<cstdio>#defineLL Long Longusing namespacestd;Const intmaxn= the;Const intmod=1e6+7;intT,N,A[MAXN],B[MAXN]; LL FAC[MAXN];intVIS[MAXN];void Set(intHigh ) {fac[0]=1; for(intI=1; i<=high;i++) Fac[i]= (fac[i-1]*i)%MoD;}voidDealintA[],ll &ans) {ans=0; memset (Vis,0,sizeof(VIS)); for(intI=0; i<n;i++) { intCnt=0; for(intj=1; j<a[i];j++)if(!vis[j]) cnt++; Ans= (ans+ (cnt*fac[n-i-1]) (%MOD))%MoD; Vis[a[i]]=1; }}intMain () {Set( -); intCase=1; CIN>>u; while(t--) {cin>>N; for(intI=0; i<n;i++) cin>>A[i]; for(intI=0; i<n;i++) cin>>B[i]; LL P1=0, p2=0, ans=0; Deal (A,P1);d EAL (B,P2); intI=0; for(i=0; i<n;i++)if(A[i]!=b[i]) Break; if(A[i]>b[i]) ans= (P1-P2)%MoD; Elseans= (P2-P1)%MoD; cout<<"Case $"<<Case++<<":"<<endl<< (Ans+mod)%mod<<Endl; } return 0;} #include<iostream>#include<cstring>#include<cstdio>#defineLL Long Longusing namespacestd;Const intmaxn= the;Const intmod=1e6+7;intT,N,A[MAXN],B[MAXN]; LL FAC[MAXN];intVIS[MAXN];void Set(intHigh ) {fac[0]=1; for(intI=1; i<=high;i++) Fac[i]= (fac[i-1]*i)%MoD;}voidDealintA[],ll &ans) {ans=0; memset (Vis,0,sizeof(VIS)); for(intI=0; i<n;i++) { intCnt=0; for(intj=1; j<a[i];j++)if(!vis[j]) cnt++; Ans= (ans+ (cnt*fac[n-i-1]) (%MOD))%MoD; Vis[a[i]]=1; }}intMain () {Set( -); intCase=1; CIN>>T; while(t--) {cin>>N; for(intI=0; i<n;i++) cin>>A[i]; for(intI=0; i<n;i++) cin>>B[i]; LL P1=0, p2=0, ans=0; Deal (A,P1);d EAL (B,P2); intI=0; for(i=0; i<n;i++)if(A[i]!=b[i]) Break; if(A[i]>b[i]) ans= (P1-P2)%MoD; Elseans= (P2-P1)%MoD; cout<<"Case $"<<Case++<<":"<<endl<< (Ans+mod)%mod<<Endl; } return 0;}
Comtop spread-----The difference between the positions of two permutations