民间100,官方80WA,求助
查看原帖
民间100,官方80WA,求助
847282
ygnh12138楼主2023/10/14 12:39
#include <iostream>
#include <cstdio>
#define mod  998244353
using namespace std;
typedef long long lli;

char a[10010][10010];
lli shu[10010][10010];//n->i
lli heng[10010][10010];//m->j
lli n,m;
bool ff[10010][10010];
//
lli check_m(lli i,lli j)
{
    if(a[i][j]=='0'&&j<=m+1)
    {
        heng[i][j]=check_m(i,j+1)+1;
        return heng[i][j];
    }
    else{heng[i][j]=0;return -1;}
}
//
lli check_n(lli i,lli j)
{
    if(a[i][j]=='0'&&i<=n)
    {
        if(heng[i][j]==-1)
        {
            heng[i][j]=check_m(i,j+1)+1;
        }
        shu[i][j]=check_n(i+1,j)+1;
        return shu[i][j];
    }
    else{shu[i][j]=0;return -1;}
}
//
int main()
{
    lli T,id,t,c,f,i,j,vc,vf,k,s_h,s_hh,sh,s_qh;
    cin>>T>>id;
    for(t=0;t<T;t++)
    {
        vc=0;vf=0;
        cin>>n>>m>>c>>f;
        for(i=1;i<=n;i++)//初始化
        {
            for(j=1;j<=m+1;j++)
            {
                a[i][j]=getchar();
                shu[i][j]=-1;
                heng[i][j]=-1;
                ff[i][j]=0;
            }
        }
        for(j=2;j<=m+1;j++)
        {
            for(i=1;i<=n;i++)
            {
                if(shu[i][j]==-1)
                {
                    if(a[i][j]=='1'){shu[i][j]=0;continue;}
                    shu[i][j]=check_n(i+1,j)+1;
                    if(shu[i][j]<=1){continue;}
                    if(heng[i][j]==-1)
                    {
                        heng[i][j]=check_m(i,j+1)+1;
                    }
                    s_h=heng[i][j];s_hh=heng[i][j]*heng[i][j];s_qh=0;
                    ff[i][j]=1;
                    for(k=1;k<=shu[i][j];k++)
                    {
                        s_h=(s_h+heng[i+k][j])%mod;
                        s_hh=(s_hh+(heng[i+k][j]*heng[i+k][j])%mod)%mod;
                        sh=(shu[i+k][j]*heng[i+k][j])%mod;
                        s_qh=(s_qh+(heng[i+k][j]*heng[i-1+k][j])%mod)%mod;
                        if(k>=2){vf=(vf+((s_h-heng[i+k][j]-heng[i+k-1][j])*sh)%mod)%mod;}
                        ff[i+k][j]=1;
                    }
                    vc=(vc+((s_h*s_h)%mod-s_hh)/2-s_qh)%mod;
                }
                else
                {
                    if(ff==0)
                    {
                        s_h=heng[i][j];s_hh=heng[i][j]*heng[i][j];s_qh=0;
                        ff[i][j]=1;
                        for(k=1;k<=shu[i][j];k++)
                        {
                            s_h=(s_h+heng[i+k][j])%mod;
                            s_hh=(s_hh+(heng[i+k][j]*heng[i+k][j])%mod)%mod;
                            sh=(shu[i+k][j]*heng[i+k][j])%mod;
                            s_qh=(s_qh+(heng[i+k][j]*heng[i-1+k][j])%mod)%mod;
                            if(k>=2){vf=(vf+((s_h-heng[i+k][j]-heng[i+k-1][j])*sh)%mod)%mod;}
                            ff[i+k][j]=1;
                        }
                        vc=(vc+((s_h*s_h)%mod-s_hh)/2-s_qh)%mod;
                    }
                }
            }
        }
        cout<<vc*c<<" "<<vf*f<<endl;
    }
    return 0;
}
2023/10/14 12:39
加载中...