rt。这份代码在 Hydro 和 云斗 都是满分,在 uoj TLE 了最后一个点,请问怎么优化?
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10,mod=998244353;
int t,id,r,p;
int n,m,ti;
long long x,y;
char c[N][N];
int a[N][N],b[N][N];
int main()
{
// freopen("plant.in","r",stdin);
// freopen("plant.out","w",stdout);
// ti=clock();
scanf("%d%d",&t,&id);
while(t--)
{
x=0,y=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
scanf("%d%d%d%d",&n,&m,&r,&p);
char k;
k=getchar();
for(register int i=1;i<=n;++i,k=getchar())
for(register int j=1;j<=m;++j)
k=getchar(),c[i][j]=k;
for(register int i=1;i<=n;++i)
for(register int j=m;j>=1;j--)
if(c[i][j]=='0')
a[i][j]=a[i][j+1]+1;
for(register int i=n;i>=1;i--)
for(register int j=1;j<=m;++j)
if(c[i][j]=='0')
b[i][j]=b[i+1][j]+1;
for(register int i=1;i<n;++i)
for(register int j=1;j<=m;++j)
{
if(c[i][j]=='1'||c[i+1][j]=='1')continue;
for(register int k=i+2;k<=n;k++)
{
if(c[k][j]=='1')break;
x+=1ll*(a[i][j]-1)*(a[k][j]-1),x%=mod;
y+=1ll*(a[i][j]-1)*(a[k][j]-1)*(b[k][j]-1),y%=mod;
}
}
printf("%lld %lld\n",x*r,y*p);
}
// cout<<clock()-ti<<endl;
return 0;
}