Submission #1299802

#TimeUsernameProblemLanguageResultExecution timeMemory
1299802s3yoonparkTracks in the Snow (BOI13_tracks)C++20
100 / 100
608 ms162436 KiB
#include <bits/stdc++.h> 
using namespace std; 

#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

int dy[4] = {-1, 0, 1, 0}; 
int dx[4] = {0, 1, 0, -1}; 

void solve()
{
    int H, W; 
    cin >> H >> W; 

    vector grid(H + 1, vector(W + 1, '.')); 
    for (int i = 1; i <= H; i++)
    {
        for (int j = 1; j <= W; j++)
        {
            cin >> grid[i][j]; 
        }
    }

    deque<pair<int,int>> dq; 
    vector dist(H + 1, vector(W + 1, 0)); 
    vector vis(H + 1, vector(W + 1, false)); 

    int ans = 1; 
    dist[1][1] = 1; 
    dq.emplace_back(1, 1); 
    while (!dq.empty()) 
    {
        auto [y, x] = dq.front(); dq.pop_front(); 
        if (vis[y][x]) continue; 
        vis[y][x] = true;
        ans = max(ans, dist[y][x]); 
        for (int k = 0; k < 4; k++)
        {
            int ny = y + dy[k], nx = x + dx[k]; 
            if (ny < 1 || ny > H || nx < 1 || nx > W || grid[ny][nx] == '.' || vis[ny][nx]) continue;
            if (grid[y][x] != grid[ny][nx])
            {
                dist[ny][nx] = dist[y][x] + 1; 
                dq.emplace_back(ny, nx); 
            } else 
            {
                dist[ny][nx] = dist[y][x]; 
                dq.emplace_front(ny, nx); 
            }
        }
    }

    cout << ans << '\n'; 
} 

signed main() 
{
    ios_base::sync_with_stdio(0); 
    cin.tie(nullptr); 
    int tc = 1; 
    // cin >> tc; 
    while (tc--) solve(); 
    return 0; 
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...