CCF给的大样例过了 自测也没问题
#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
int T,id,n,m,c,f;
int ansc,ansf;
int a[1005][1005];
int right0[1005][1005],down0[1005][1005];
int upright0[1005][1005];
char ch;
int main()
{
cin>>T>>id;
while(T--)
{
ansc=ansf=0;
cin>>n>>m>>c>>f;
memset(a,0,sizeof a);
memset(right0,0,sizeof right0);
memset(down0,0,sizeof down0);
memset(upright0,0,sizeof upright0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>ch;
a[i][j]=ch-'0';
}
}
for(int i=1;i<=n;i++)
for(int j=m,t=0;j>=1;j--)
{
if(a[i][j])right0[i][j]=t=0;
else right0[i][j]=t++;
}
for(int j=1;j<=m;j++)
for(int i=n,t=0;i>=1;i--)
{
if(a[i][j])down0[i][j]=t=0;
else down0[i][j]=t++;
}
for(int j=1;j<=m;j++)
{
int tc=0,tf=0;
for(int i=1;i<=n;i++)
{
if(a[i][j])
{
upright0[i-1][j]=upright0[i][j]=0;
ansc+=tc,ansf+=tf;
tc=tf=0;
continue;
}
upright0[i][j]=upright0[i-1][j]+right0[i][j];
tf+=tc;
tc+=upright0[i-2][j]*right0[i][j];
}
ansc+=tc,ansf+=tf;
}
printf("%d %d\n",(c*ansc)%mod,(f*ansf)%mod);
}
return 0;
}