1pts求助
查看原帖
1pts求助
1041369
Gua_gua_楼主2025/7/19 11:27

CCF给的大样例过了 自测也没问题

#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
int T,id,n,m,c,f; 
int ansc,ansf;
int a[1005][1005];
int right0[1005][1005],down0[1005][1005];
int upright0[1005][1005];
char ch;
int main()
{
	cin>>T>>id;
	while(T--)
	{
		ansc=ansf=0;
		cin>>n>>m>>c>>f;
		memset(a,0,sizeof a);
		memset(right0,0,sizeof right0);
		memset(down0,0,sizeof down0);
		memset(upright0,0,sizeof upright0);
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				cin>>ch;
				a[i][j]=ch-'0';
			}
		}
		for(int i=1;i<=n;i++)
			for(int j=m,t=0;j>=1;j--)
			{
				if(a[i][j])right0[i][j]=t=0;
				else right0[i][j]=t++;
			}		
		for(int j=1;j<=m;j++)
			for(int i=n,t=0;i>=1;i--)
			{
				if(a[i][j])down0[i][j]=t=0;
				else down0[i][j]=t++;
			}
		for(int j=1;j<=m;j++)
		{
			int tc=0,tf=0;
			for(int i=1;i<=n;i++)
			{
				if(a[i][j])
				{
					upright0[i-1][j]=upright0[i][j]=0;
					ansc+=tc,ansf+=tf;
					tc=tf=0;
					continue;
				}
				upright0[i][j]=upright0[i-1][j]+right0[i][j];
				tf+=tc;
				tc+=upright0[i-2][j]*right0[i][j];
			}
			ansc+=tc,ansf+=tf;
		}
		printf("%d %d\n",(c*ansc)%mod,(f*ansf)%mod);
	}
	return 0;
}
2025/7/19 11:27
加载中...