Submission #1234594

#TimeUsernameProblemLanguageResultExecution timeMemory
1234594darshitmittal777Tracks in the Snow (BOI13_tracks)C++20
100 / 100
832 ms64416 KiB
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
using namespace std;

// void solve(vector<vector<char>> &grid,char cur,int x, int y)
// {
//     if(x>=grid.size()||x<0||y>=grid[0].size()||y<0)
//     return;
//     if(grid[x][y]!=cur)
//     return;   
//     grid[x][y] = (grid[x][y]=='F')?'R':'F';
//     solve(grid,cur,x,y+1);
//     solve(grid,cur,x,y-1);
//     solve(grid,cur,x+1,y);
//     solve(grid,cur,x-1,y);
// }

int single(vector<vector<char>> &grid)
{
    int c1 = 0,c2=0;
    for(int i=0;i<grid.size();i++)
    {
        for(int j=0;j<grid[0].size();j++)
        {
            if(grid[i][j]=='F')
            c1++;
            else if(grid[i][j]=='R')
            c2++;
        }
    }
    if(c1==0&&c2==0)
    return -1;
    else if(c1==0||c2==0)
    return 1;
    else 
    return 0;
}

// int main()
// {
//     int h,w;cin>>h>>w;
//     vector<vector<char>> grid(h,vector<char>(w));
//     for(int i=0;i<h;i++)
//     {
//         for(int j=0;j<w;j++)
//         {
//             cin>>grid[i][j];
//         }
//     }
//     if(single(grid)==-1)
//     {
//         cout<<0<<endl;
//         return 0;
//     }
//     int ans = 1;
//     while(single(grid)==0)
//     {
//         solve(grid,grid[0][0],0,0);
//         ans++;
//     }
//     cout<<ans<<endl;
//     return 0;
// }


int main()
{
    int h,w;cin>>h>>w;
    vector<vector<char>> grid(h,vector<char>(w));
    for(int i=0;i<h;i++)
    {
        for(int j=0;j<w;j++)
        {
            cin>>grid[i][j];
        }
    }
    if(single(grid)==-1)
    {
        cout<<0;return 0;
    }
    deque<pair<int,int>>current;
    current.push_back({0,0});
    vector<vector<bool>> vis(h,vector<bool>(w));
    vis[0][0] = true;
    char curr = grid[0][0];
    int ans = 1;
    while(current.size())
    {
        pair<int,int> cur = current.front();
        current.pop_front();
        int x = cur.first, y = cur.second;
        if(grid[x][y]!=curr)
        {
            curr = grid[x][y];
            ans++;
        }
        // right
        if (y + 1 < w && !vis[x][y + 1] && grid[x][y + 1] != '.') {
            vis[x][y + 1] = true;
            if (grid[x][y] == grid[x][y + 1])
                current.push_front({x, y + 1});
            else
                current.push_back({x, y + 1});
        }

        // down
        if (x + 1 < h && !vis[x + 1][y] && grid[x + 1][y] != '.') {
            vis[x + 1][y] = true;
            if (grid[x][y] == grid[x + 1][y])
                current.push_front({x + 1, y});
            else
                current.push_back({x + 1, y});
        }

        // left
        if (y - 1 >= 0 && !vis[x][y - 1] && grid[x][y - 1] != '.') {
            vis[x][y - 1] = true;
            if (grid[x][y] == grid[x][y - 1])
                current.push_front({x, y - 1});
            else
                current.push_back({x, y - 1});
        }

        // up
        if (x - 1 >= 0 && !vis[x - 1][y] && grid[x - 1][y] != '.') {
            vis[x - 1][y] = true;
            if (grid[x][y] == grid[x - 1][y])
                current.push_front({x - 1, y});
            else
                current.push_back({x - 1, y});
        }
    } 
    cout<<ans<<endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...