#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
// #define DEBUG
typedef long long ll;
const ll maxn = 1e3 + 5;
const ll mod = 998244353;
ll T, id;
ll n, m, c, f;
char graph[maxn][maxn];
ll sum[maxn][maxn];
// !(I AK IOI)
// ToT
int main() {
scanf("%lld%lld", &T, &id);
while (T--) {
memset(sum, 0, sizeof(sum));
memset(graph, 0, sizeof(graph));
scanf("%lld%lld%lld%lld", &n, &m, &c, &f);
for (ll i = 1; i <= n; i++) {
char str[maxn];
scanf("%s", str + 1);
for (ll j = 1; j <= m; j++) {
graph[i][j] = str[j];
}
}
for (ll i = 1; i <= n; i++) {
for (ll j = m - 1; j >= 1; j--) {
if (graph[i][j] == '1') {
sum[i][j] = -1;
} else if (graph[i][j + 1] == '0') {
sum[i][j] = (sum[i][j + 1] + 1) % mod;
}
}
}
#ifdef DEBUG
for (ll i = 1; i <= n; i++) {
for (ll j = 1; j <= m; j++) {
printf("%lld ", sum[i][j]);
}
printf("\n");
}
#endif
ll cntc = 0, cntf = 0;
for (ll j = 1; j < m; j++) {
ll legalc = 0, legalf = 0;
for (ll i = 1; i <= n; i++) {
if (sum[i][j] == -1) {
legalc = legalf = 0;
continue;
}
(cntc += (sum[i][j] * legalc) % mod) % mod;
(cntf += (legalf % mod)) % mod;
(legalf += (sum[i][j] * legalc) % mod) % mod;
(legalc += max(0ll, sum[i - 1][j])) % mod;
}
}
printf("%lld %lld\n", cntc * c % mod, cntf * f % mod);
}
return 0;
}
如题,在最后输出的时候
printf("%lld %lld\n", cntc * c % mod, cntf * f % mod);
这样子就没事,但如果不取模的话
printf("%lld %lld\n", cntc * c, cntf * f);
就只有78分。 这是为什么啊?