如果你wa on subtack1 且 46pts
查看原帖
如果你wa on subtack1 且 46pts
824941
bsjsaikou10楼主2024/8/29 20:38

注意一下判断a[i + 2][j] == 0这种类似的东西是会越界的,只需要把a的初始值全置1就行了

46pts:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e3 + 4;
const int p = 998244353;
int n,m,c,f;
int a[MAXN][MAXN];
int prei[MAXN][MAXN],prej[MAXN][MAXN];
int pre[MAXN][MAXN],pre2[MAXN][MAXN];
void solve(){
	cin >> n >> m >> c >> f;
	/*for(int i = 0; i <= n + 2; i++){
		for(int j = 0; j <= m + 2; j++){
			a[i][j] = 1;
		}
	}*/
	for(int i = 1; i <= n; i++){
		string s;
		cin >> s;
		for(int j = 0; j < m; j++){
			a[i][j + 1] = (s[j] == '1' ? 1 : 0);
		}
	}
	for(int i = 0; i <= n + 1; i++){
		for(int j = 0; j <= m + 1; j++){
			prei[i][j] = 0;
			prej[i][j] = 0;
			pre[i][j] = 0;
			pre2[i][j] = 0;
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = m; j >= 1; j--){
			if(a[i][j] == 0){
				prei[i][j] = prei[i][j + 1] + 1;
			}
			else{
				prei[i][j] = 0;
			}
		}
	}
	for(int j = 1; j <= m; j++){
		for(int i = n; i >= 1; i--){
			if(a[i][j] == 0){
				prej[i][j] = prej[i + 1][j] + 1;
			}
			else{
				prej[i][j] = 0;
			}
		}
	}
	for(int j = 1; j <= m; j++){
		for(int i = n; i >= 1; i--){
			if(a[i][j] == 0){
				pre[i][j] = pre[i + 1][j] + prei[i][j] - 1;
			}
			else{
				pre[i][j] = 0;
			}
		}
	}
	int ansc = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			if(a[i][j] == 0 && a[i + 1][j] == 0 && a[i + 2][j] == 0){
				ansc = (ansc + ((prei[i][j] - 1) % p * pre[i + 2][j] % p) % p) % p;
			}
		}
	}
	for(int j = 1; j <= m; j++){
		for(int i = n; i >= 1; i--){
			if(a[i][j] == 0){
				pre2[i][j] = (pre2[i + 1][j] + (prej[i + 1][j] % p * prei[i][j + 1] % p) % p) % p;
			}
			else{
				pre2[i][j] = 0;
			}
		}
	}
	int ansf = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			if(a[i][j] == 0 && a[i + 1][j] == 0 && a[i + 2][j] == 0){
				ansf = (ansf + ((prei[i][j] - 1) % p * pre2[i + 2][j] % p) % p) % p;
			}
		}
	}
	cout << (ansc % p * c % p) % p << " " << (ansf % p * f % p) % p << endl;
}
signed main(){
	//freopen("plant2.in","r",stdin);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T,id;
	cin >> T >> id;
	while(T--){
		solve();
	}
}

100pts

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e3 + 4;
const int p = 998244353;
int n,m,c,f;
int a[MAXN][MAXN];
int prei[MAXN][MAXN],prej[MAXN][MAXN];
int pre[MAXN][MAXN],pre2[MAXN][MAXN];
void solve(){
	cin >> n >> m >> c >> f;
	for(int i = 0; i <= n + 2; i++){
		for(int j = 0; j <= m + 2; j++){
			a[i][j] = 1;
		}
	}
	for(int i = 1; i <= n; i++){
		string s;
		cin >> s;
		for(int j = 0; j < m; j++){
			a[i][j + 1] = (s[j] == '1' ? 1 : 0);
		}
	}
	for(int i = 0; i <= n + 1; i++){
		for(int j = 0; j <= m + 1; j++){
			prei[i][j] = 0;
			prej[i][j] = 0;
			pre[i][j] = 0;
			pre2[i][j] = 0;
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = m; j >= 1; j--){
			if(a[i][j] == 0){
				prei[i][j] = prei[i][j + 1] + 1;
			}
			else{
				prei[i][j] = 0;
			}
		}
	}
	for(int j = 1; j <= m; j++){
		for(int i = n; i >= 1; i--){
			if(a[i][j] == 0){
				prej[i][j] = prej[i + 1][j] + 1;
			}
			else{
				prej[i][j] = 0;
			}
		}
	}
	for(int j = 1; j <= m; j++){
		for(int i = n; i >= 1; i--){
			if(a[i][j] == 0){
				pre[i][j] = pre[i + 1][j] + prei[i][j] - 1;
			}
			else{
				pre[i][j] = 0;
			}
		}
	}
	int ansc = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			if(a[i][j] == 0 && a[i + 1][j] == 0 && a[i + 2][j] == 0){
				ansc = (ansc + ((prei[i][j] - 1) % p * pre[i + 2][j] % p) % p) % p;
			}
		}
	}
	for(int j = 1; j <= m; j++){
		for(int i = n; i >= 1; i--){
			if(a[i][j] == 0){
				pre2[i][j] = (pre2[i + 1][j] + (prej[i + 1][j] % p * prei[i][j + 1] % p) % p) % p;
			}
			else{
				pre2[i][j] = 0;
			}
		}
	}
	int ansf = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			if(a[i][j] == 0 && a[i + 1][j] == 0 && a[i + 2][j] == 0){
				ansf = (ansf + ((prei[i][j] - 1) % p * pre2[i + 2][j] % p) % p) % p;
			}
		}
	}
	cout << (ansc % p * c % p) % p << " " << (ansf % p * f % p) % p << endl;
}
signed main(){
	//freopen("plant2.in","r",stdin);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T,id;
	cin >> T >> id;
	while(T--){
		solve();
	}
}
2024/8/29 20:38
加载中...