NOIP T1在洛谷上测得了100pts,但小图灵上只有54pts,感觉自己的算法也没有太大问题(?),一直想不明白(讨论区的注意事项都没出问题),不知道哪个分会更靠谱
还有就是我的代码如果能帮忙看看就更好了
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+5,Mod=998244353;
int T,id,n,m,c1,f1,hx[N][N],sx[N][N],zqh[N][N],c[N][N],f[N][N],sumc,sumf;
int mod(int a){
if(a>=Mod){
a%=Mod;
}
return a;
}
char a[N][N];
signed main(){
// freopen("plant.in","r",stdin);
// freopen("plant.out","w",stdout);
scanf("%d%d",&T,&id);
while(T--){
scanf("%d%d%d%d",&n,&m,&c1,&f1);
for(int i=1;i<=n;i++){
cin>>a[i]+1;
}
for(int i=1;i<=n;i++){
for(int j=m-1;j>=1;j--){
if(a[i][j]=='1'||a[i][j+1]=='1'){
hx[i][j]=0;
}
else{
hx[i][j]=mod(hx[i][j+1]+1);
}
zqh[i][j]=hx[i][j];
}
}
for(int i=n;i>=1;i--){
for(int j=1;j<=m;j++){
if(a[i][j]=='1'){
sx[i][j]=0;
}
else{
sx[i][j]=mod(sx[i+1][j]+1);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='1'){
zqh[i][j]=0;
}
else{
zqh[i][j]=mod(zqh[i][j]+zqh[i-1][j]);
}
}
}
for(int i=2;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i-1][j]=='1'){
c[i][j]=0;
}
else{
c[i][j]=mod(hx[i][j]*zqh[i-2][j]);
sumc=mod(sumc+c[i][j]);
}
}
}
for(int i=2;i<=n-1;i++){
for(int j=1;j<=n;j++){
f[i][j]=mod(c[i][j]*sx[i+1][j]);
sumf=mod(sumf+f[i][j]);
}
}
printf("%d %d\n",sumc*c1,sumf*f1);
sumc=sumf=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
hx[i][j]=sx[i][j]=zqh[i][j]=c[i][j]=f[i][j]=0;
a[i][j]='\0';
}
}
}
return 0;
}