打击挺大的,但还是想知道为什么,拜托大家了
#include<cstring>
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int T,id,n,m,s1[1010][1010],s3[1010][1010];
long long s2[1010][1010];
char a[1010][1010];
long long c,f;
const long long mod=998244353;
int main(){
freopen("plant.in","r",stdin);
freopen("plant.out","w",stdout);
scanf("%d %d",&T,&id);
while(T--){
scanf("%d %d %lld %lld",&n,&m,&c,&f);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
a[i][j]=getchar();
while(a[i][j]!='0'&&a[i][j]!='1')
a[i][j]=getchar();
}
for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--)
if(a[i][j]=='1') s1[i][j]=0;
else s1[i][j]=s1[i][j+1]+1;
for(int j=1;j<=m;j++)
for(int i=n;i>=1;i--)
if(a[i][j]=='1') s3[i][j]=0;
else s3[i][j]=s3[i+1][j]+1;
for(int j=1;j<=m;j++)
for(int i=n;i>=1;i--)
if(a[i][j]=='1') s2[i][j]=0;
else s2[i][j]=s2[i+1][j]+s1[i][j]-1;
long long ans=0;
for(int i=1;i<=n-2;i++)
for(int j=1;j<=m;j++){
if(a[i][j]=='1'||a[i+1][j]=='1'||a[i+2][j]=='1') continue;
ans=(ans+(long long)(s2[i][j]-(s1[i][j]-1)-(s1[i+1][j]-1))*(long long)(s1[i][j]-1)%mod)%mod;
}
printf("%lld ",ans*c);
ans=0;
for(int j=1;j<=m;j++)
for(int i=n;i>=1;i--)
if(a[i][j]=='1') s2[i][j]=0;
else s2[i][j]=s2[i+1][j]+(long long)(s1[i][j]-1)*(long long)(s3[i][j]-1);
for(int i=1;i<=n-3;i++)
for(int j=1;j<=m;j++){
if(a[i][j]=='1'||a[i+1][j]=='1'||a[i+2][j]=='1'||a[i+3][j]=='1') continue;
ans=(ans+(long long)(s2[i][j]-(s1[i][j]-1)*(s3[i][j]-1)-(s1[i+1][j]-1)*(s3[i+1][j]-1)+mod)%mod*(long long)(s1[i][j]-1)%mod)%mod;
}
printf("%lld\n",ans*f);
}
return 0;
}