不求AC,求80,#21、#22WA求助,悬赏关注
查看原帖
不求AC,求80,#21、#22WA求助,悬赏关注
429491
xin20110426楼主2023/11/16 15:49
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int mod = 998244353;
int T, id;
int a[1005][1005], row[1005][1005], col[1005][1005], yr[1005][1005], yc[1005][1005];
signed main() {
	cin >> T >> id;
	while (T--) {
		memset(a, 0, sizeof(a));
		memset(row, 0, sizeof(row));
		memset(col, 0, sizeof(col));
		memset(yr, 0, sizeof(yr));
		memset(yc, 0, sizeof(yc));
		int ansC = 0;
		int ansF = 0;
		int n, m, c, f; cin >> n >> m >> c >> f;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				char t; cin >> t;
				a[i][j] = t - '0';
				row[i][j] = row[i][j - 1] + a[i][j];
				col[i][j] = col[i - 1][j] + a[i][j];
			}
		}
		int len = 0;
		for (int i = 1; i <= n; i++) {
			len = 0;
			for (int j = m; j >= 1; j--) {
				if (a[i][j]) len = 0;
				else yr[i][j] = len++;
			}
		}
		for (int i = 1; i <= m; i++) {
			len = 0;
			for (int j = n; j >= 1; j--) {
				if (a[j][i]) len = 0;
				else yc[j][i] = len++;
			}
		}
//		for (int i = 1; i <= n; i++) {
//			for (int j = 1; j <= m; j++) {
//				cout << yr[i][j] << " ";
//			}
//			cout << endl;
//		}
		if (id == 5) {
			for (int i = 1; i <= n; i++) {
				for (int j = i + 2; j <= n; j++) {
					for (int k = 1; k < m; k += 3) {
						if (col[j][k] - col[i - 1][k] != 0) continue;
						int top = yr[i][k], bottom = yr[j][k], temp = yc[j][k];
						ansC = (ansC + top * bottom % mod) % mod;
						ansF = (ansF + temp * top % mod * bottom % mod) % mod;
					}
				}
			}
		}
		else if (id == 6) {
			for (int i = 1; i <= n; i += 4) {
				for (int j = i + 2; j <= i + 3; j++) {
					for (int k = 1; k < m; k++) {
						if (col[j][k] - col[i - 1][k] != 0) continue;
						int top = yr[i][k], bottom = yr[j][k], temp = yc[j][k];
						ansC = (ansC + top * bottom % mod) % mod;
						ansF = (ansF + temp * top % mod * bottom % mod) % mod;
					}
				}
			}
		}
		else {
			if (c != 0) {
				for (int i = 1; i <= n; i++) {
					for (int j = i + 2; j <= n; j++) {
						for (int k = 1; k <= m; k++) {
							if (col[j][k] - col[i - 1][k] != 0) continue;
							int top = yr[i][k], bottom = yr[j][k];
							ansC = (ansC + top * bottom % mod) % mod;
						}
					}
				}
			}
			if (f != 0) {
				for (int i = 1; i <= n; i++) {
					for (int j = i + 2; j <= n; j++) {
						for (int k = 1; k <= m; k++) {
							if (col[j][k] - col[i - 1][k] != 0) continue;
							int top = yr[i][k], bottom = yr[j][k], temp = yc[j][k];
							ansF = (ansF + temp * top % mod * bottom % mod) % mod;
						}
					}
				}
			}			
		}
		cout << ansC * c % mod << " ";
		cout << ansF * f % mod << endl;
	}
	return 0;
}

2023/11/16 15:49
加载中...