问题:
B. Labyrinth
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define fi first
#define se second
#define vi vector<int>
#define vll vector<long long>
#define pii pair<int,int>
#define endl '\n'
#define MOD 1000000007
const int N=2e5+5,INF=1e18;void solve(){int n,m,r,c,x,y;cin>>n>>m>>r>>c>>x>>y;vector<string>g(n);for(int i=0;i<n;i++) cin>>g[i];int sr=r-1,sc=c-1;vector<vi>dist(n,vi(m,INF));deque<pii>dq;dist[sr][sc]=0;dq.emplace_front(sr,sc);int dr[4]={-1,1,0,0};//左右上下int dc[4]={0,0,1,-1};while(!dq.empty()){auto [i,j]=dq.front();dq.pop_front();int cur=dist[i][j];for(int k=0;k<4;k++){int ni=i+dr[k],nj=j+dc[k];if(ni<0||ni>=n||nj<0||nj>=m) continue;if(g[ni][nj]=='*') continue;int add=(k==3)?1:0;if(cur+add<dist[ni][nj]){dist[ni][nj]=cur+add;if(add==0) dq.emplace_front(ni,nj);else dq.emplace_back(ni,nj);}}}int ans=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(dist[i][j]==INF) continue;int L=dist[i][j];int cd=j-sc;int R=L+cd;if(L<=x&&R>=0&&R<=y) ans++;}}cout<<ans<<endl;
}signed main(){ios::sync_with_stdio(false);cin.tie(0);int T=1;
// cin>>T;while(T--)solve();return 0;
}