#31#32TLE求助!
查看原帖
#31#32TLE求助!
604881
jimmyforever楼主2024/9/6 12:38
#include<iostream>
#include<string>
using namespace std;
int T,id,f[1001][1001],g[1001][1001],h[1001][1001],n,m,c,f0,C,F;
int main()
{
	cin>>T>>id;
	int p=998244353;
	for(int i=1;i<=T;i++)
	{
		for(int j=0;j<=1000;j++)
		{
			for(int k=0;k<=1000;k++)
			{
				f[j][k]=0;
				g[j][k]=0;
				h[j][k]=0;
			}
		}
		cin>>n>>m>>c>>f0;
		if(c==0)
		{
			cout<<0<<" ";
			goto F1;
		}
		for(int j=1;j<=n+1;j++)
		{
			string str;
			getline(cin,str);
			for(int k=1;k<=m;k++)
			{
				f[j-1][k]=str[k-1]-48;
			}
	    }
		for(int j=1;j<=n;j++)
		{	
			for(int k=1;k<=m-1;k++)
			{
				int l=k;
				while(l<=m)
				{
					if(f[j][l]==0)
					{
						g[j][k]++;
						l++;
					}
					else break;
				}
			}
		}
		for(int k=1;k<=m;k++)
		{
			for(int j=1;j<=n-2;j++)
			{
				int l=j;
				while(l<=n)
				{
					if(f[l][k]==0)
					{
						h[j][k]++;
						l++;
					}
					else break;
				}
			}
		}
		C=0;
		for(int k=1;k<=m-1;k++)
		{
			for(int j=1;j<=n-2;j++)
			{
				if(h[j][k]>=3&&g[j][k]>=2)
				{
					for(int l=j+2;l<=j+h[j][k]-1;l++)
					{
						if(g[l][k]>=2)
						C=(C+(g[l][k]-1)*(g[j][k]-1))%p;
					}
				}
			}
		}
		cout<<C<<" ";
		F1:if(f0==0)
		{
			cout<<0;
			goto F2;
		}
		F=0;
		for(int k=1;k<=m-1;k++)
		{
			for(int j=1;j<=n-2;j++)
			{
				if(h[j][k]>=4&&g[j][k]>=2)
				{
					for(int l=j+2;l<=j+h[j][k]-2;l++)
					{
						if(g[l][k]>=2)
						F=(F+(g[l][k]-1)*(g[j][k]-1)*(j+h[j][k]-1-l))%p;
					}
				}
			}
		}
		cout<<F;
		F2:cout<<endl;
	}
	return 0;
}
2024/9/6 12:38
加载中...