求助,79分,为什么有RE的
查看原帖
求助,79分,为什么有RE的
843895
lzh3675801013楼主2023/11/15 12:07
#include <bits/stdc++.h>
using namespace std;
char a[1005][1005];
int b[1005];//在往下搜索时以每一个表头f[xj]为起点往右出现的0的数量 
int m,n,c,f;
int C(){//计算c的数量 
	long long ans=0;
	for(int i=1;i<=n-2;i++){
		for(int j=1;j<=m-1;j++){
			if(a[i][j]=='1')	continue; 
			int rj=j,xi=i;
			while(rj<m and a[i][rj+1]=='0')	rj++;//rj往右搜到的最后一个0的坐标
			while(xi<n and a[xi+1][j]=='0')	xi++;//xi往下搜到的最后一个0的坐标
			int cnt=0;
			for(int l=i+2;l<=xi;l++){
				int k=j;
				for(;k<m and a[l][k+1]=='0';)	k++;
				ans+=(rj-j)*(k-j);
				ans%=(998244353*c);
			}
		} 
	}
	return ans;
}
int F(){//计算f的数量 
	long long ans=0;
	for(int i=1;i<=n-2;i++){
		for(int j=1;j<=m-1;j++){
			if(a[i][j]=='1')	continue; 
			int rj=j,xi=i;
			while(rj<m and a[i][rj+1]=='0')	rj++;//rj往右搜到的最后一个0的坐标
			while(xi<n and a[xi+1][j]=='0')	xi++;//xi往下搜到的最后一个0的坐标
			int cnt=0;
			for(int l=i+2;l<xi;l++){
				int k=j;
				for(;k<m and a[l][k+1]=='0';)	k++;
				ans+=(rj-j)*(k-j)*(xi-l);
			}
			ans%=(998244353*f);
		} 
	}
	return ans;
}
int main()
{
	int t,id;
	cin>>t>>id;
	while(t--){
		cin>>n>>m>>c>>f;
		for(int i=1;i<=n;i++)
			cin>>a[i]+1;
		if(c==0 and f==0)	printf("0 0") ;
		cout<<C()<<' '<<F()<<endl;
	}
	return 0;
}
2023/11/15 12:07
加载中...