rt,大样例能过但是似乎 f 求的是错的
#include <bits/stdc++.h>
#define mod 998244353
#define int long long
#define maxn 2010
using namespace std;
int a[maxn][maxn],sum[maxn][maxn],suml[maxn][maxn],sumc[maxn][maxn],sumy[maxn][maxn],sumf[maxn][maxn],sumfa[maxn][maxn];
signed main()
{
int tt,id;
// freopen("plant2.in","r",stdin);
cin>>tt>>id;
while(tt--)
{
int n,m,c,f,ansc=0,ansf=0;
cin>>n>>m>>c>>f;
char t;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>t;
if(t=='1') a[i][j]=0;
else a[i][j]=1;
}
}
for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--)
if(a[i][j]==0)
sum[i][j]=0;
else
sum[i][j]=sum[i][j+1]+a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(sum[i][j]!=0)
sum[i][j]--;
for(int i=n;i>=1;i--)
for(int j=1;j<=m;j++)
if(a[i][j]==0)
suml[i][j]=0;
else
suml[i][j]=suml[i+1][j]+sum[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i+1][j]==1)
sumc[i][j]=sum[i][j]*suml[i+2][j]%mod;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ansc=(ansc+sumc[i][j])%mod;
for(int i=n;i>=1;i--)
for(int j=1;j<=m;j++)
if(a[i][j]==0)
sumy[i][j]=0;
else
sumy[i][j]=(sumy[i+1][j]+a[i][j])%mod;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(sumy[i][j]>=2)
sumf[i][j]=sum[i][j]*(sumy[i][j]-1)%mod;
else
sumf[i][j]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]==0)
sumfa[i][j]=0;
else
sumfa[i][j]=(sumfa[i+1][j]+sumf[i][j])%mod;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i+1][j]==1)
ansf=(ansf+sum[i][j]*sumfa[i+2][j]%mod)%mod;
cout<<ansc*c%mod<<" "<<ansf*f%mod<<endl;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
sum[i][j]=sumc[i][j]=sumf[i][j]=sumfa[i][j]=suml[i][j]=sumy[i][j]=a[i][j]=0;
ansc=ansf=0;
}
return 0;
}