12分求助
查看原帖
12分求助
1046995
hjbaoyx楼主2024/7/4 21:08

link

#include<bits/stdc++.h>
#define ll long long
using namespace std;
short a[1010][1010];
ll f[1010][1010];
ll mod(ll x) {return x%998244353;}
void solve() {
	memset(f,-1,sizeof f);
	ll sum=0,sum1=0;
	int n,m,cc,ff;
	cin>>n>>m>>cc>>ff;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) {
			char c;
			cin>>c;
			a[i][j]=c-'0';
		}
	for(int i=1;i<=n;i++)
		for(int j=m;j>=1;j--)
			if(a[i][j]==0) f[i][j]=f[i][j+1]+1;
	for(int j=1;j<=m-1;j++) {
		int cnt=0,cnt1=0;
		for(int i=1;i<=n;i++) {
			if(a[i][j]==1) {
				cnt=0;
				continue;
			}
			sum+=mod(mod(cnt)*mod(f[i][j]));
			sum=mod(sum);
			sum1+=mod(cnt1);
			sum1=mod(sum1);
			cnt1+=mod(mod(cnt)*mod(f[i][j]));
			cnt1=mod(cnt1);
			cnt+=mod(max(0LL,mod(f[i-1][j])));
			cnt=mod(cnt);
		}
	}
	cout<<mod(mod(sum)*cc)<<" "<<mod(mod(sum1)*ff)<<endl;
}
int main() {
	int T,id;
	cin>>T>>id;
	while(T--) solve(); 
	return 0;
}
2024/7/4 21:08
加载中...