社区讨论

80pts,#31,32TLE

P8865[NOIP2022] 种花参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lrpzre1d
此快照首次捕获于
2024/01/23 14:44
2 年前
此快照最后确认于
2024/01/23 16:58
2 年前
查看原帖
为什么会T呀?大佬帮忙看看呗
CPP
#include <bits/stdc++.h>
#define fre(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
using namespace std;
typedef long long ll;

const int N = 1e3 + 5;
const int INF = 0x3f3f3f3f;
const int MOD = 998244353;

int T, id;
int n, m, c, f;
char ch[N][N];
int sum_back[N][N], sum_under[N][N];
int ans;

int main()
{
    fre(plant);
    scanf("%d%d", &T, &id);

    while (T--)
    {
		memset(sum_back, 0, sizeof(sum_back));
		memset(sum_under, 0, sizeof(sum_under));
        scanf("%d%d%d%d", &n, &m, &c, &f);

        for (int i = 1; i <= n; i++)
            scanf("%s", ch[i] + 1);

        for (int i = 1; i <= n; i++)
            for (int j = m; j; j--)
                sum_back[i][j] = (ch[i][j] == '0' ? sum_back[i][j + 1] + 1 : 0);

        for (int j = 1; j <= m; j++)
            for (int i = n; i; i--)
                sum_under[i][j] = (ch[i][j] == '0' ? sum_under[i + 1][j] + 1 : 0);

        if (c)
        {
            ans = 0;

            for (int y1 = 1; y1 <= m; y1++)
                for (int x1 = 1; x1 <= n; x1++)
                    for (int x2 = x1 + 2; x2 <= n && x2 <= sum_under[x1][y1] + x1 - 1; x2++)
                        ans = (ans + (sum_back[x1][y1] - 1) * (sum_back[x2][y1] - 1)) % MOD;

            printf("%d ", ans);
        }
        else
        {
            printf("0 ");
        }

        if (f)
        {
            ans = 0;

            for (int y1 = 1; y1 <= m; y1++)
                for (int x1 = 1; x1 <= n; x1++)
                    for (int x2 = x1 + 2; x2 <= n && x2 <= sum_under[x1][y1] + x1 - 1; x2++)
                        ans = (ans + (sum_back[x1][y1] - 1) * (sum_back[x2][y1] - 1) * (sum_under[x2][y1] - 1)) % MOD;

            printf("%d\n", ans);
        }
        else
        {
            printf("0\n");
        }
    }

    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...