1 条题解

  • 0
    @ 2026-05-05 13:44:05

    赛时AC代码。

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=510,mod=998244353;
    int n,m;
    int a[N][N],s,ans;
    vector<pair<int,int>> g[N*N];
    int ksm(int x,int y)
    {
        int ans=1;
        while(y)
        {
            if(y%2==1) ans=ans*x%mod;
            x=x*x%mod,y/=2;
        }
        return ans;
    }
    signed main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++) cin>>a[i][j];
            sort(a[i]+1,a[i]+m+1);
            int k=1;
            while(k<=m)
            {
                int c=0,id=a[i][k];
                while(k<=m&&a[i][k]==id) c++,k++;
                g[id].push_back({i,c});
            }
        }
        s=ksm(m,n);
        for(int i=1;i<=n*m;i++)
        {
            if(!g[i].size()) continue;
            int p=1,k=0;
            for(int j=1;j<=n;j++)
            {
                if(k<g[i].size()&&g[i][k].first==j)
                    p=p*(m-g[i][k].second)%mod,k++;
                else p=p*m%mod;
            }
            ans=(ans+s-p+mod)%mod;
        }
        cout<<ans;
        return 0;
    }
    
  • 1

信息

ID
1005
难度
5
分类
组合数学 | 容斥原理 点击显示
标签
递交数
0
已通过
0
通过率
?
上传者