Submission #366821

#TimeUsernameProblemLanguageResultExecution timeMemory
366821ngpin04Tracks in the Snow (BOI13_tracks)C++14
100 / 100
653 ms119164 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
using namespace std;
const int N = 4e3 + 5;
const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};

char a[N][N];

int dis[N][N];
int n,m,ans;

void bfs(int i, int j)
{
    deque <pair <int, int>> q;

    q.push_back(mp(i, j));
    dis[i][j] = 1;

    while (q.size())
    {
        pair <int, int> cur = q.front();
        q.pop_front();
        int x = cur.fi;
        int y = cur.se;

        for (int dir = 0; dir < 4; dir++)
        {
            int u = x + dx[dir];
            int v = y + dy[dir];
            if (min(u, v) > 0 && u <= n && v <= m && dis[u][v] == 0 && a[u][v] != '.')
            {
                if (a[u][v] == a[x][y])
                {
                    q.push_front(mp(u, v));
                    dis[u][v] = dis[x][y];
                } else {
                    q.push_back(mp(u, v));
                    dis[u][v] = dis[x][y] + 1;
                }
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    //freopen("file.inp","r",stdin);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        string s;
        cin >> s;
        for (int j = 1; j <= m; j++)
            a[i][j] = s[j - 1];
    }

    bfs(n, m);
    int ans = 0;
    for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
        ans = max(ans, dis[i][j]);

    cout << ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...