1 pts 求调
查看原帖
1 pts 求调
688783
SilverLi楼主2023/10/11 17:10

样例全过,但 1 pts.

#include <iostream>
#define int long long
using namespace std;
constexpr int N = 1e3 + 5;
constexpr int mod = 998244353;
int T, id, n, m, c, f;
int a[N][N], nxt[N][N];
int line[N][N];
signed main() {
// 	freopen("plant.in", "r", stdin);
// 	freopen("plant.out", "w", stdout);
	scanf("%d%d", &T, &id);
	while (T--) {
		scanf("%d%d%d%d", &n, &m, &c, &f);
		char ch = getchar();
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= m + 1; ++j) {
				ch = getchar();
				a[i][j] = ch - '0';
			}
		for (int i = 1; i <= n; ++i)
			for (int j = m; j >= 1; --j)
				if (a[i][j] == 0)
					nxt[i][j] = nxt[i][j + 1] + 1;
		for (int j = 1; j <= m; ++j)
			for (int i = n; i >= 1; --i)
				if (a[i][j] == 0)
					line[i][j] = line[i + 1][j] + 1;
// 		cerr << "Time to print NXT" << '\n';
// 		for (int i = 1; i <= n; ++i) {
// 			for (int j = 1; j <= m; ++j)
// 				cerr << nxt[i][j] << ' ';
// 			cerr << '\n';
// 		}
// 		cerr << "Time to print LINE" << '\n';
// 		for (int i = 1; i <= n; ++i) {
// 			for (int j = 1; j <= m; ++j)
// 				cerr << line[i][j] << ' ';
// 			cerr << '\n';
// 		}
		int vc = 0, vf = 0;
		if (c)
			for (int y0 = 1; y0 <= m; ++y0) {
				int sum = 0;
				// cerr << "Y0 INTOC " << y0 << '\n';
				for (int x1 = 3; x1 <= n; ++x1) {
					if (nxt[x1 - 2][y0] && nxt[x1 - 1][y0])
						sum += nxt[x1 - 2][y0] - 1;
					else	sum = 0;
				// 	cerr << x1 << ' ' << sum << '\n';
					if (nxt[x1][y0]) {
						vc += sum * (nxt[x1][y0] - 1);
				// 		cerr << "UPC " << sum * (nxt[x1][y0] - 1) << " ANS " << vc << '\n';
						vc %= mod;
					}
				}
			}
		if (f)
			for (int y0 = 1; y0 <= m; ++y0) {
				int sum = 0;
				// cerr << "Y0 INTOF " << y0 << '\n';
				for (int x1 = 3; x1 <= n; ++x1) {
					if (nxt[x1 - 2][y0] && nxt[x1 - 1][y0] && line[x1][y0] > 1)
						sum += nxt[x1 - 2][y0] - 1;
					else	sum = 0;
				// 	cerr << x1 << ' ' << sum << '\n';
					if (nxt[x1][y0]) {
						vf += sum * (nxt[x1][y0] - 1) * (line[x1][y0] - 1);
				// 		cerr << "UPF " << sum * (nxt[x1][y0] - 1) << " ANS " << vc << '\n';
						vf %= mod;
					}
				}
			}
		cout << vc * c << ' ' << vf * f << '\n';
	}
	return 0;
}
2023/10/11 17:10
加载中...