比赛 EYOI常规赛 4th 评测结果 AAAAAAAAAAAAAAAAAAAAATTTT
题目名称 Emiya家今天的饭 最终得分 84
用户昵称 遥时_彼方 运行时间 5.855 s
代码语言 C++ 内存使用 8.59 MiB
提交时间 2022-05-27 21:15:46
显示代码纯文本
#include<bits/stdc++.h>
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define drep(x,y,z) for(int x=y;x>=z;x--)
#define ull unsigned long long
#define ll long long
using namespace std;
inline int read()
{
	int x=0;bool flag=1;char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-')flag=0;ch=getchar();}
	while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
	if(flag) return x;
	return ~(x-1);
}
inline void write(int x)
{
	if(x<0) {x=~(x-1);putchar('-');}
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
///////////////////////////////
const ll mod=998244353;
ull ans;
int nc,mc;
int n[101][2001];
ll f[105][105][105];
ll cnt[105];
int main()
{
    freopen("2019meal.in","r",stdin);
	freopen("2019meal.out","w",stdout);
    nc=read(),mc=read();
    rep(i,1,nc)
	{
		rep(o,1,mc) 
		{
			n[i][o]=read();
			cnt[i]+=n[i][o];
		}
	}
	ans=1;
	rep(i,1,nc)
	{
		ans*=(cnt[i]+1);
		ans%=mod;
	}
	ll sum=0;
//	cout<<"A:"<<ans<<endl;
    rep(ni,1,mc)//第ni列 
    {
    	memset(f,0,sizeof(f));
    	f[0][0][0]=1;
    	rep(i,1,nc)//第i行 
    	{
    		rep(j,0,i)//当前列j个点 
    		{
    			rep(k,0,i-j)//其他列k个点 
    			{
    				f[i][j][k]=f[i-1][j][k];
    				f[i][j][k]%=mod;
    				if(j)
    				{
    					f[i][j][k]+=f[i-1][j-1][k]*n[i][ni];
					}
					if(k)
					{
						f[i][j][k]+=f[i-1][j][k-1]*((cnt[i]-n[i][ni])%mod);
					}
    				f[i][j][k]%=mod;
				}
			}
		}
		rep(j,1,nc)//当前列j个点 
    	{
    		rep(k,0,nc-j)//其他列k个点 
    		{
    			if(j>k) sum+=f[nc][j][k];
			}
    	}
		sum%=mod;
//		cout<<ni<<":"<<sum<<endl;
	}
	ans+=(mod-sum);
	ans%=mod;
	cout<<ans-1<<endl;
    return 0;
}