#31#32TLE
查看原帖
#31#32TLE
1286422
Muggles楼主2025/8/1 12:28
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
const int mod=998244353;
int T,id,n,m,c,f,g[N][N];

char s[N][N];
void solve(){
	int C=0,F=0;
	scanf("%d%d%d%d",&n,&m,&c,&f);
	memset(g,0,sizeof(g));
	for(int i=1;i<=n;i++){
		scanf("%s",s[i]+1);
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=1;j--){
			if(s[i][j]=='0'){
				g[i][j]=g[i][j+1]+1; 
			}else{
				g[i][j]=0;
			} 
		}
	}
	for(int j=1;j<=m;j++){
		int A_=0;
		for(int i=1;i<=n;i++){
			if(s[i][j]=='1'){
				A_=0;
				continue;
			}
			int A=0,B,D=0;
			if(i>2&&s[i-1][j]=='0'&&s[i-2][j]=='0'){
				A=A_+g[i-2][j]-1; 
			}else{
				A=0;
			}
			A_=A;
			B=g[i][j]-1;
			while(s[i+D+1][j]=='0'&&i+D+1<=n){
				D++;
			} 
			C=C*1ll+(A*B*1ll)%mod;
			F=(F*1ll+A*B*D*1ll)%mod;
		}
	}
	printf("%d %d\n",C*c,F*f);
}
int main(){
	scanf("%d%d",&T,&id);
	while(T--){
		solve();
	} 
	return 0;
} 
2025/8/1 12:28
加载中...