0 pts 求调
查看原帖
0 pts 求调
565378
Orange1015楼主2023/8/20 21:17
#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int mod = 998244353;

int t, id, n, m, c, f;
char a[1005][1005];
ll r[1005][1005], u[1005][1005], d[1005][1005];


int main()
{
	scanf("%d%d", &t, &id);
    while(t--)
    {
    	scanf("%d%d%d%d", &n, &m, &c, &f);
    	ll vc = 0, vf = 0;
    	for(int i = 1; i <= n; i++)
		{
			scanf("%s", a[i] + 1);
		}
		memset(r, 0, sizeof(r));
		memset(u, 0, sizeof(u));
		memset(d, 0, sizeof(d));
		for(int i = n; i >= 1; i--)
		{
			for(int j = 1; j <= m; j++)
			{
				if(a[i][j] = '0') d[i][j] = d[i + 1][j] + 1;
			}
		}
		for(int i = 1; i <= n; i++)
		{
			for(int j = m; j >= 1; j--)
			{
				if(a[i][j] == '0'){
					r[i][j] = r[i][j + 1] + 1;
					if(i > 2 && a[i - 1][j] == '0' && r[i - 2][j] > 0)
						u[i][j] = u[i - 1][j] + r[i - 2][j] - 1;
					ll cc = (r[i][j] - 1) * u[i][j] % mod;
					ll cf = cc * (d[i][j] - 1) % mod;
					vc = (vc + cc) %mod;
					vf = (vf + cf) % mod;
				}
			}
		}
		printf("%lld %lld\n", c * vc % mod, f * vf % mod);
	}
	return 0;
}

2023/8/20 21:17
加载中...