80求调!!优化又优化改了六七个小时了
查看原帖
80求调!!优化又优化改了六七个小时了
1027989
npyzzzs楼主2024/10/12 22:08
#include<bits/stdc++.h>
#define mod 998244353
using namespace std;
int T,id,n,m,c,f,hen[1011][1011],zhong[1011][1011];
char ch;
bool a[1011][1011];
inline int read(){
	int x = 0, f = 1;
	char ch = getchar();
	while (!isdigit(ch)){
		if (ch == '-') 
			f = -1;
		ch = getchar();
	}
	while (isdigit(ch)){
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	return x * f;
}
inline void write(int x){
	if (x < 0) putchar('-'), x = -x;
	if (x > 9) write(x / 10);
	putchar(x % 10 + '0');
}
long long cc()
{
	long long ans=0;
	for(int i=1;i<n;i++)
	{
		for(int j=1;j<m;j++)
		{
			if((!a[i][j])&&(!a[i+1][j])&&(!a[i][j+1])&&(!a[i+2][j]))
			{
				int ys=i+1;
				while(!a[ys+1][j])
				{
					ys++;
					ans+=hen[ys][j]*hen[i][j]%mod;
					ans%=mod;
				}
			}
		}
	}
	return ans;
}
long long ff()
{
	long long ans=0;
	for(int i=1;i<n;i++)
	{
		for(int j=1;j<m;j++)
		{
			if((!a[i][j])&&(!a[i+1][j])&&(!a[i+2][j])&&(!a[i+3][j])&&(!a[i][j+1]))
			{
				int lyg=i+1;
				while(!a[lyg+1][j])
				{
					lyg++;
					ans+=hen[lyg][j]*hen[i][j]*(zhong[i][j]+i-lyg)%mod;
					ans%=mod;
				}
			}
		}
	}
	return ans;
}
void record()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if((!a[i][j]))
			{
				int num1=j;
				while((!a[i][num1+1])&&num1+1<=m) num1++;
				for(int g=j;g<=num1;g++)
					hen[i][g]=num1-g;
				int num2=i;
				while((!a[num2+1][j])&&num2+1<=n) num2++;
				for(int g=i;g<=num2;g++)
					zhong[g][j]=num2-g;
			}			
		}
	}
}
int main()
{
	T=read();
	id=read();
	while(T--)
	{
		n=read();
		m=read();
		c=read();
		f=read();
		memset(a,1,sizeof(a));
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				cin>>ch;
				a[i][j]=ch-48;
			}
		}
		record();
		(c) ? write(cc()),printf(" ") : printf("0 ");
		(f) ? write(ff()),printf("\n") : printf("0\n");
	}
	return 0;
}
2024/10/12 22:08
加载中...