93分求调awa
查看原帖
93分求调awa
246331
mystic_qwq楼主2024/9/27 22:59
#include<bits/stdc++.h>
using namespace std;
const int N=1010,P=998244353;
#define int long long
int T,id,n,m,c,f;
char a[N][N];
int ri[N][N],dn[N][N];
int sum[N];
void sol(){
  memset(a,0,sizeof a);
  memset(ri,0,sizeof ri);
  memset(dn,0,sizeof dn);
  memset(sum,0,sizeof sum);
  cin>>n>>m>>c>>f;
  for(int i=1;i<=n;++i)
    scanf("%s",a[i]+1);
  fill(a[n+1],a[n+1]+n+2,0);
  for(int i=n;i>=1;--i)
    for(int j=m;j>=1;--j) {
      if(a[i][j]=='1') ri[i][j]=dn[i][j]=-1;
      else {
        ri[i][j]=1+(a[i][j+1]=='0')*ri[i][j+1];
        dn[i][j]=1+(a[i+1][j]=='0')*dn[i+1][j];
      }
    }
  /*for(int i=1;i<=n;++i)
    for(int j=1;j<=m;++j) cout<<ri[i][j]<<" \n"[j==m];
  for(int i=1;i<=n;++i)
    for(int j=1;j<=m;++j) cout<<dn[i][j]<<" \n"[j==m];*/
  int ans1=0,ans2=0;
  for(int j=m;j>=1;--j) {
    memset(sum,0,sizeof sum);
    for(int i=n;i>=1;--i){
      if(ri[i][j]==-1) continue;
      sum[i]=(sum[i+1]+ri[i][j]-1)%P;
      if(dn[i][j]>=3)(ans1+=(ri[i][j]-1)*sum[i+2]%P)%=P;
    }
  }
  for(int j=m;j>=1;--j) {
    memset(sum,0,sizeof sum);
    for(int i=n;i>=1;--i){
      if(ri[i][j]==-1) continue;
      sum[i]=(sum[i+1]+(ri[i][j]-1)*(dn[i][j]-1))%P;
      if(dn[i][j]>=4)(ans2+=(ri[i][j]-1)*sum[i+2]%P)%=P;
    }
  }
  cout<<ans1<<' '<<ans2<<'\n';
}
main(){
  //cin.tie(0)->sync_with_stdio(0);
  cin>>T>>id;
  while(T--)sol();
}
2024/9/27 22:59
加载中...