TLE,帮蒟蒻找找错吧QAQ
查看原帖
TLE,帮蒟蒻找找错吧QAQ
741732
small_Dongpo楼主2023/8/21 19:00

本蒟蒻的代码QAQ

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

typedef long long l;
l a[505][505], ax[] = {0, -1, 1, 0, 0}, ay[] = {0, 0, 0, 1, -1}, n, m, cnt = 0, al[505][505], ar[505][505];
l vis[505][505];

void dfs(l x, l y)
{
    if (vis[x][y]) return;
    vis[x][y] = 1;
    for (l i = 1; i <= 4; ++i)
    {
        l tx = x + ax[i], ty = y + ay[i];
        if (tx > 0 && tx <= n && ty > 0 && ty <= m && a[tx][ty] > a[x][y])
        {
            dfs(tx, ty);
            al[x][y] = min(al[tx][ty], al[x][y]);
            ar[x][y] = max(ar[tx][ty], ar[x][y]);
        }
    }
}

int main()
{
    scanf("%lld%lld", &n, &m);
    memset(vis, 0, sizeof(vis));
    memset(al, 0x3f, sizeof(al));
    memset(ar, 0, sizeof(ar));
    for (l i = 1; i <= n; ++i)
    {
        for (l j = 1; j <= m; ++j)
        {
            scanf("%lld", &a[i][j]);
        }
    }
    for (int i = 1; i <= m; i++)
    {
        al[n][i] = ar[n][i] = i;
    }
    for (l i = 1; i <= m; ++i)
    {
        dfs(n, i);
    }
    for (l i = 1; i <= m; ++i)
    {
        cnt += vis[n][i];
    }
    if (cnt < m)
    {
        printf("0\n%lld", cnt);
        return 0;
    }
    l left = 1;
    cnt = 0;
    while (left <= m)
    {
        l maxr = 0;
        for (l i = 1; i <= m; ++i)
        {
            if (al[1][i] <= left) maxr = max(maxr, ar[1][i]);
        }
        cnt++;
        left = maxr + 1;
    }
    printf("1\n%lld", cnt);
    return 0;
}

悬赏关注

2023/8/21 19:00
加载中...