求助!为什么同一份代码每次会RE不同的点?
查看原帖
求助!为什么同一份代码每次会RE不同的点?
215590
Ckger楼主2020/11/7 10:39
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define foir(i,l,r) for (register int i=l;i<=r;++i)
#define fopr(i,l,r) for (register int i=l;i>=r;--i)
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define maxn 110
#define maxm 2010
#define mod 998244353

inline int read()
{
	int x=0;bool f=0;char c=getchar();
	while (!isdigit(c)) f|=c=='-',c=getchar();
	while (isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return f?-x:x;
}

ll n,m;
ll ans,ans2;
ll s[maxn];
ll a[maxn][maxm];
ll f[maxn][maxn][maxn];
ll g[maxn][maxn];

inline void init()
{
	n=read(),m=read();
	foir(i,1,n)
		foir(j,1,m)
		{
			a[i][j]=read();
			s[i]+=a[i][j];
			s[i]%=mod;
		}
}

int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	init();
	foir(h,1,m)
	{
	//	f[i][j][k]:当前选到第i行,在其他列选了k个,第h行选了j个,的方案数 
//		cout<<h<<endl;
		memset(f,0,sizeof(f));
		f[0][0][0]=1;
		foir(i,1,n)
			foir(j,0,n)
				foir(k,0,n)
					f[i][j][k]=(f[i-1][j][k]%mod+((k-1>=0?f[i-1][j][k-1]:0)%mod*(s[i]-a[i][h]+mod)%mod)%mod+((j-1>=0?f[i-1][j-1][k]:0)%mod*a[i][h]%mod)%mod)%mod/*,cout<<i<<" "<<j<<" "<<k<<":"<<f[i][j][k]<<endl*/;
		foir(j,0,n)
			foir(k,0,n)
				if (j>k)
					ans+=f[n][j][k],ans%=mod;
	}
	g[0][0]=1;
	foir(i,1,n)
	{
		foir(j,0,n)
		{
			if (j>0) g[i][j]=(g[i-1][j]%mod+s[i]%mod*g[i-1][j-1]%mod)%mod;
			else g[i][j]=g[i-1][j];
		}
	}
	foir(j,1,n)
		ans2+=g[n][j],ans2%=mod;
	cout<<(ans2-ans+mod)%mod<<endl;
	return 0;
}
2020/11/7 10:39
加载中...