求助,三个样例都过了,但零分
查看原帖
求助,三个样例都过了,但零分
517656
zhuchenyi7楼主2023/11/16 21:06

RT 有WA

#include <bits/stdc++.h> 
using namespace std;

const long long int N = 998244353;
int T, id;
long long int n, m, ci, fi;
char a[1010][1010];
long long int f[1010][1010];
long long int cf[1010], ff[1010], ft[1010];
long long int cnum, fnum;
int main() {
	
	cin >> T >> id;
	while (T > 0) {
		T--;
		cin >> n >> m >> ci >> fi;
		memset (a, 0, sizeof(a));
		memset (f, 0, sizeof(f));
		memset (cf, 0, sizeof(cf));
		memset (ff, 0, sizeof(cf));
		cnum = fnum = 0;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				cin >> a[i][j];
			}
		}
		for (int i = 1; i <= n; i++) {
			for (int j = m; j >= 1; j--) {
				if (a[i][j] == '1') f[i][j] = -1;
				else if (a[i][j + 1] == '0') f[i][j] = f[i][j + 1] + 1;
			} 
		}
		// Find C&F;
		for (int j = 1; j <= m; j++) {
			int t = 1;
			for (int i = 1; i <= n + 1; i++) {
				if (f[i][j] == -1 || i == n + 1) {
					for (long long int x = 1; x <= n; x++) {
						for (long long int y = x + 2; y <= n; y++) {
							cnum = cnum % N + (1ll * cf[x] * cf[y]) % N;
							//cout << cf[x] <<' ' << cf[y] << ' ' << cnum << endl;
						}
					}
					for (long long int x = 1; x<= n; x++) {
						for (long long int y = x + 2; y <= n; y++) {
							fnum = fnum % N + (1ll * ff[x] * ff[y] * ft[y]) % N;
							//cout << ff[x] <<" " << ff[y] << ' ' << ft[y] <<' '<< cnum << endl;
						}
					}
					memset (cf, 0, sizeof(cf));
					memset (ff, 0, sizeof(ff));
					memset (ft, 0, sizeof(ft));
					t = 1;
					continue;
				}
				if (a[i][j] > 0) {
					cf[i] = f[i][j] % N;
					if (a[i + 1][j] >= 0 && i + 1 <= n) ff[i] = f[i][j] % N;
					for (int k = i + 1; k <= n; k++) {
						if (a[k][j] == '0') ft[i]++;
						else break;
					}
				}
			}
		}
		cnum = ((cnum % N) * (ci % N)) % N;
		fnum = ((fnum % N) * (fi % N)) % N;
		cout << cnum << ' ' << fnum;
	}
	
	return 0;
}
2023/11/16 21:06
加载中...