Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int INF = 2e9;
- using pi = pair <int, int>;
- using pii = pair <int, pi>;
- int n, m;
- char ar[2001][2001];
- int idx[] = {0, 0, -1, 1};
- int idy[] = {1, -1, 0, 0};
- map <pi, int> ans;
- bool position(int i, int j){
- return i >= 1 and i <= n and j >=1 and j <= m;
- }
- vector < vector <int>> dis(2001, vector <int> (2001, INF));
- bool visited[2001][2001];
- int main(){
- scanf("%d%d", &n, &m);
- queue <pii> q;
- for(int i=1;i<=n;i++){
- for(int j=1;j<=m;j++){
- scanf(" %c", &ar[i][j]);
- if(ar[i][j] == 'X') q.push({0, {i ,j}});
- }
- }
- int cnt = 0, sum = 0;
- while(q.size() > 0){
- int ui = q.front().second.first;
- int uj = q.front().second.second;
- int Dis = q.front().first;
- q.pop();
- if(visited[ui][uj])
- continue;
- visited[ui][uj] = true;
- if(ar[ui][uj] == 'A'){
- cnt ++;
- sum += Dis;
- }
- for(int d=0;d<4;d++){
- int vi, vj;
- vi = ui + idx[d];
- vj = uj + idy[d];
- if(!position(vi, vj) or visited[vi][vj] or ar[vi][vj] == 'W')
- continue;
- if(ar[vi][vj] == 'X'){
- dis[vi][vj] = 0;
- q.push({0, {vi, vj}});
- }
- else if(Dis + 1 < dis[vi][vj]){
- dis[vi][vj] = Dis + 1;
- q.push({Dis + 1,{vi, vj}});
- }
- }
- }
- printf("%d %d", cnt, 2 * sum);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement