P5367康托展开

题目描述

求1N的一个给定全排列在所有1N全排列中的排名。结果对998244353取模。

输入输出格式

输入格式:

第一行一个正整数N。

第二行N个正整数,表示1N的一种全排列。

输出格式:

一行一个非负整数,表示答案对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;
}

猜你喜欢

转载自www.cnblogs.com/SFWR-YOU/p/10887154.html