P5367康托展开
题目描述
求1∼N的一个给定全排列在所有1∼N全排列中的排名。结果对998244353取模。
输入输出格式
输入格式:
第一行一个正整数N。
第二行N个正整数,表示1∼N的一种全排列。
输出格式:
一行一个非负整数,表示答案对998244353取模的值。
#include<bits/stdc++.h> using namespace std; long long mod=998244353,n,ans=1; int a[10001000]; long long fac[10001000]; int main() { cin>>n; fac[0]=1; for(int i=1;i<=n;i++)fac[i]=(fac[i-1]*(i%mod))%mod; for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++){ long long k=0; for(int j=i+1;j<=n;j++) if(a[j]<a[i]) k++; ans=(ans+k*fac[n-i]%mod)%mod; } cout<<ans; }