wa 10pts 求助
查看原帖
wa 10pts 求助
464712
ForgetOIDuck楼主2024/11/8 22:48

a了前4个点

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll T, n, m, c, f, d[2002][2002], e[2002][2002], ansc[2002][2002], ansf[2002][2002], anscc, ansff;
bool mp[2002][2002];
char tt;
bool check(ll x, ll y) {
	if (x + 2 > n) return 0;
	if (mp[x][y] || mp[x + 1][y] || mp[x + 2][y]) return 0;
	return 1;
	
}
int main() {
	cin >> T >> n;
	while (T -- ) {
		cin >> n >> m >> c >> f;
		anscc = ansff = 0;
		for (ll i = 1; i <= n; i ++ ) for (ll j = 1; j <= m; j ++ ) cin >> tt, mp[i][j] = tt - '0';
		for (ll i = 1; i <= n; i ++ ) for (ll j = m; j; j -- ) d[i][j] = (mp[i][j] ? 0 : d[i][j + 1] + 1);
		for (ll j = 1; j <= m; j ++ ) for (ll i = n; i; i -- ) e[i][j] = (mp[i][j] ? 0 : e[i + 1][j] + 1);
		for (ll j = 1; j <= m; j ++ ) for (ll i = n; i; i -- ) ansc[i][j] = (mp[i][j] ? 0 : ansc[i + 1][j] + max(0ll, d[i][j] - 1));
		for (ll i = 1; i <= n; i ++ ) for (ll j = 1; j <= m; j ++ ) if (check(i, j)) anscc += max(0ll, (ansc[i][j] - max(0ll, d[i + 1][j] - 1) - max(0ll, d[i][j] - 1))) * max(0ll, d[i][j] - 1);
		for (ll j = 1; j <= m; j ++ ) for (ll i = n; i; i -- ) ansf[i][j] = (mp[i][j] ? 0 : ansf[i + 1][j] + max(0ll, d[i][j] - 1) * max(0ll, e[i][j] - 1));
		for (ll i = 1; i <= n; i ++ ) for (ll j = 1; j <= m; j ++ ) if (check(i, j)) ansff += max(0ll, (ansf[i][j] - max(0ll, d[i + 1][j] - 1) * max(0ll, e[i + 1][j] - 1) - max(0ll, d[i][j] - 1) * max(0ll, e[i][j] - 1))) * max(0ll, d[i][j] - 1);
		cout << anscc * c << ' ' << ansff * f << endl;
		
	}
}
2024/11/8 22:48
加载中...