1064D - Labyrinth - CodeForces Solution


graphs shortest paths *1800

Please click on ads to support us..

C++ Code:

/* {وَقُلْ رَبِّ زِدْنِي عِلْمًاً} */
#include<bits/stdc++.h>
using namespace std;
#define TY cin.tie(0), cout.tie(0), cin.sync_with_stdio(0), cout.sync_with_stdio(0);
#define ll long long int
#define f(nn) for(ll i = 0; i < (nn); i++)
#define fj(nn) for(ll j = 0; j < (nn); j++)
int dx[] = { +0, +0, -1, +1, +1, +1, -1, -1 };
int dy[] = { -1, +1, +0, +0, +1, -1, +1, -1 };
const ll N = 3000;
int n,m,le[N][N],ri[N][N],vis[N][N],x,y,l,r;
char arr[N][N];
bool valid(int i,int j){
    return (i>=0 && i<n && j>=0 && j<m && arr[i][j]!='*' && !vis[i][j]);
}
void BFS() {
    x--,y--;
    deque<pair<int,int>> q;
    q.emplace_front(x,y);
    vis[x][y] = 1;
    ri[x][y] = r;
    le[x][y] = l;
    while (!q.empty()) {
        int xx = q.front().first;
        int yy = q.front().second;
        q.pop_front();
        for (int i = 0; i < 4; ++i) {
            int ii = xx + dx[i], jj = yy + dy[i];
            if(valid(ii,jj)){
                if(i>1){
                    q.emplace_front(ii,jj);
                    ri[ii][jj] = ri[xx][yy];
                    le[ii][jj] = le[xx][yy];
                    vis[ii][jj] = 1;
                }
                else if(i==0 && le[xx][yy]>0){
                    q.emplace_back(ii,jj);
                    ri[ii][jj] = ri[xx][yy];
                    le[ii][jj] = le[xx][yy] - 1;
                    vis[ii][jj] = 1;
                }
                else if(i==1 && ri[xx][yy]>0){
                    q.emplace_back(ii,jj);
                    ri[ii][jj] = ri[xx][yy] - 1;
                    le[ii][jj] = le[xx][yy];
                    vis[ii][jj] = 1;
                }
            }
        }
    }
}
void jo() {
    int cnt = 0;
    cin>>n>>m>>x>>y>>l>>r;
    f(n)fj(m)cin>>arr[i][j];
    BFS();
    f(n)fj(m)cnt+=vis[i][j];
    cout<<cnt<<"\n";
}
int main() {
    TY
    jo();
}


Comments

Submit
0 Comments
More Questions

1476E - Pattern Matching
1107A - Digits Sequence Dividing
1348A - Phoenix and Balance
1343B - Balanced Array
1186A - Vus the Cossack and a Contest
1494A - ABC String
1606A - AB Balance
1658C - Shinju and the Lost Permutation
1547C - Pair Programming
550A - Two Substrings
797B - Odd sum
1093A - Dice Rolling
1360B - Honest Coach
1399C - Boats Competition
1609C - Complex Market Analysis
1657E - Star MST
1143B - Nirvana
1285A - Mezo Playing Zoma
919B - Perfect Number
894A - QAQ
1551A - Polycarp and Coins
313A - Ilya and Bank Account
1469A - Regular Bracket Sequence
919C - Seat Arrangements
1634A - Reverse and Concatenate
1619C - Wrong Addition
1437A - Marketing Scheme
1473B - String LCM
1374A - Required Remainder
1265E - Beautiful Mirrors