牛客(多校6):African Sort

在这里插入图片描述
示例1
输入

2 2
1 2
2 1

输出

0
4

示例2
输入

5 1
3 2 5 1 4

输出

332748129

在这里插入图片描述
在这里插入图片描述

代码:

#include <cstdio>
#define ll long long
const int N=1e5+10,mod=998244353;
ll ksm(ll a,ll b){ll r=1;while(b){if(b&1)r=r*a%mod;a=a*a%mod,b>>=1;}return r;};
ll n,m,f[N],a[N];bool vis[N];
int main(){
    f[2]=4;
    for(int i=3;i<N;i++)f[i]=(f[i-1]+1)%mod*1ll*i%mod*ksm(i-1,mod-2)%mod;
    scanf("%lld%lld",&n,&m);
    while(m--){
        for(int i=1;i<=n;i++)scanf("%lld",a+i),vis[i]=0;
        ll ans=0;
        for(int i=1;i<=n;i++)if(!vis[i]){
            vis[i]=1;
            ll res=a[i],cnt=1;
            while(res^i) vis[res]=1,res=a[res],++cnt;
            ans=(ans+f[cnt])%mod;
        }printf("%lld\n",ans);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_46144237/article/details/107661398