Submission #534894

#TimeUsernameProblemLanguageResultExecution timeMemory
534894aadit_ambadkarTracks in the Snow (BOI13_tracks)C++17
100 / 100
533 ms143000 KiB
/*
    This code belongs to Aadit Ambadkar
    Date: 2022-03-07 21:34:47
    Problem: tis
*/
#include <bits/stdc++.h>
using namespace::std;
 
typedef long long ll;
#define F0R(i, n) for (int i = 0; i < n; i++)
#define R0F(i, n) for (int i = n-1; i >= 0; i--)
#define FOR(i, a, n) for (int i = a; i < n; i++)
#define pb push_back
#define fastio ios::sync_with_stdio(0); cin.tie(0)
#define MOD 1000000007
#define FF first
#define SS second
 
int n, m;
int board[4005][4005];
bool vis[4005][4005];
 
int main() {
    fastio;
    cin >> n >> m;
    F0R(i, n) {
        string s;
        cin >> s;
        F0R(j, m) {
            if (s[j]=='F') board[i][j]=1;
            else if (s[j]=='R') board[i][j]=2;
            else board[i][j]=0;
            vis[i][j]=false;
        }
    }
    // F0R(i, n) {
    //     F0R(j, m) {
    //         cout << board[i][j] << " ";
    //     }
    //     cout << "\n";
    // }
    // cout << "\n";
    deque<pair<int, pair<int, int>>> pq;
    pq.push_front({1, {0, 0}});
    vis[0][0]=true;
    int ans = 0;
    while (!pq.empty()) {
        auto p = pq.front(); pq.pop_front();
        int g = p.FF, u = p.SS.FF, v = p.SS.SS;
        // if (vis[u][v]) continue;
        // cout << u << " " << v << " " << g << "\n";
        ans = max(ans, g);
        vis[u][v]=true;
        if (u < n-1 && !vis[u+1][v] && board[u+1][v]!=0) {
            vis[u+1][v]=true;
            if (board[u][v]==board[u+1][v]) pq.push_front({g, {u+1, v}});
            else pq.push_back({g+1, {u+1, v}});
        }
        if (v < m-1 && !vis[u][v+1] && board[u][v+1]!=0) {
            vis[u][v+1]=true;
            if (board[u][v]==board[u][v+1]) pq.push_front({g, {u, v+1}});
            else pq.push_back({g+1, {u, v+1}});
        }
        if (u > 0 && !vis[u-1][v] && board[u-1][v]!=0) {
            vis[u-1][v]=true;
            if (board[u][v]==board[u-1][v]) pq.push_front({g, {u-1, v}});
            else pq.push_back({g+1, {u-1, v}});
        }
        if (v > 0 && !vis[u][v-1] && board[u][v-1]!=0) {
            vis[u][v-1]=true;
            if (board[u][v]==board[u][v-1]) pq.push_front({g, {u, v-1}});
            else pq.push_back({g+1, {u, v-1}});
        }
    }
    cout << ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...