Submission #978530

#TimeUsernameProblemLanguageResultExecution timeMemory
978530BodishaMecho (IOI09_mecho)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #define MAX_N 801 using namespace std; int n, s;char grid[MAX_N][MAX_N];bool visited[MAX_N][MAX_N];int beed[MAX_N][MAX_N];int steps[MAX_N][MAX_N]; bool check(int t) {   pair<int, int> mecho_pos, home_pos;   for(int i = 0; i < n; i++) {       for(int j = 0; j < n; j++) {           visited[i][j] = false;           steps[i][j] = n * n;           if(grid[i][j] == 'M') {               mecho_pos = {i, j};           }           if(grid[i][j] == 'D') {               home_pos = {i, j};           }       }   }   queue<pair<int, int>> q;   visited[mecho_pos.first][mecho_pos.second] = true;   steps[mecho_pos.first][mecho_pos.second] = 0;   q.push(mecho_pos);   while(!q.empty()) {       pair<int, int> curr = q.front();         q.pop();       if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M' || grid[curr.first + 1][curr.second] == 'D')) {           visited[curr.first + 1][curr.second] = true;           steps[curr.first + 1][curr.second] = steps[curr.first][curr.second] + 1;           q.push({curr.first + 1, curr.second});       }       if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M' || grid[curr.first - 1][curr.second] == 'D')) {           visited[curr.first - 1][curr.second] = true;           steps[curr.first - 1][curr.second] = steps[curr.first][curr.second] + 1;           q.push({curr.first - 1, curr.second});       }       if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M' || grid[curr.first][curr.second + 1] == 'D')) {           visited[curr.first][curr.second + 1] = true;           steps[curr.first][curr.second + 1] = steps[curr.first][curr.second] + 1;           q.push({curr.first, curr.second + 1});       }       if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M' || grid[curr.first][curr.second - 1] == 'D')) {           visited[curr.first][curr.second - 1] = true;           steps[curr.first][curr.second - 1] = steps[curr.first][curr.second] + 1;           q.push({curr.first, curr.second - 1});       }   }   for(int i = 0; i < n; i++) {       for(int j = 0; j < n; j++) {           visited[i][j] = false;       }   }   if(t + 1 > beed[mecho_pos.first][mecho_pos.second]) {       return false;   }   queue<pair<pair<int, int>, int>> newq;   visited[mecho_pos.first][mecho_pos.second] = true;   newq.push({mecho_pos, 0});   while(!newq.empty()) {       pair<pair<int, int>, int> curr = newq.front();         newq.pop();       int tmp = t + 1 + (curr.second + 1) / s;       if(curr.first.first + 1 < n && tmp <= beed[curr.first.first + 1][curr.first.second] && !visited[curr.first.first + 1][curr.first.second] && (grid[curr.first.first + 1][curr.first.second] == 'G' || grid[curr.first.first + 1][curr.first.second] == 'M' || grid[curr.first.first + 1][curr.first.second] == 'D')) {           visited[curr.first.first + 1][curr.first.second] = true;           newq.push({{curr.first.first + 1, curr.first.second}, curr.second + 1});       }       if(curr.first.first - 1 >= 0 && tmp <= beed[curr.first.first - 1][curr.first.second] && !visited[curr.first.first - 1][curr.second] && (grid[curr.first.first - 1][curr.first.second] == 'G' || grid[curr.first.first - 1][curr.first.second] == 'M' || grid[curr.first.first - 1][curr.first.second] == 'D')) {           visited[curr.first.first - 1][curr.first.second] = true;           newq.push({{curr.first.first - 1, curr.first.second}, curr.second + 1});       }       if(curr.first.second + 1 < n && tmp <= beed[curr.first.first][curr.first.second + 1] && !visited[curr.first.first][curr.first.second + 1] && (grid[curr.first.first][curr.first.second + 1] == 'G' || grid[curr.first.first][curr.first.second + 1] == 'M' || grid[curr.first.first][curr.first.second + 1] == 'D')) {           visited[curr.first.first][curr.first.second + 1] = true;           newq.push({{curr.first.first, curr.first.second + 1}, curr.second + 1});       }       if(curr.first.second - 1 >= 0 && tmp <= beed[curr.first.first][curr.first.second - 1] && !visited[curr.first.first][curr.first.second - 1] && (grid[curr.first.first][curr.first.second - 1] == 'G' || grid[curr.first.first][curr.first.second - 1] == 'M' || grid[curr.first.first][curr.first.second - 1] == 'D')) {           visited[curr.first.first][curr.first.second - 1] = true;           newq.push({{curr.first.first, curr.first.second - 1}, curr.second + 1});       }   }   return visited[home_pos.first + 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first][home_pos.second + 1] || visited[home_pos.first][home_pos.second - 1];} int main() {   vector<pair<int, int>> hives;   cin >> n >> s;   for(int i = 0; i < n; i++) {       string tmp;       cin >> tmp;       for(int j = 0; j < n; j++) {           grid[i][j] = tmp[j];           if(grid[i][j] == 'H') {               hives.push_back({i, j});           }       }   }   queue<pair<int, int>> q;   for(auto iter : hives) {       visited[iter.first][iter.second] = true;       beed[iter.first][iter.second] = 0;       q.push(iter);   }   while(!q.empty()) {       pair<int, int> curr = q.front();         q.pop();       if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M')) {           visited[curr.first + 1][curr.second] = true;           beed[curr.first + 1][curr.second] = beed[curr.first][curr.second] + 1;           q.push({curr.first + 1, curr.second});       }       if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M')) {           visited[curr.first - 1][curr.second] = true;           beed[curr.first - 1][curr.second] = beed[curr.first][curr.second] + 1;           q.push({curr.first - 1, curr.second});       }       if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M')) {           visited[curr.first][curr.second + 1] = true;           beed[curr.first][curr.second + 1] = beed[curr.first][curr.second] + 1;           q.push({curr.first, curr.second + 1});       }       if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M')) {           visited[curr.first][curr.second - 1] = true;           beed[curr.first][curr.second - 1] = beed[curr.first][curr.second] + 1;           q.push({curr.first, curr.second - 1});       }   }   int l = 0, r = n * n;   int ans = -1;    // true true true ... (true) false false   while(l <= r) {       int mid = l + (r - l) / 2;       if(check(mid)) {           ans = mid;           l = mid + 1;       } else {           r = mid - 1;       }   }   cout << ans;   return 0;}#define MAX_N 801 using namespace std; int n, s;char grid[MAX_N][MAX_N];bool visited[MAX_N][MAX_N];int beed[MAX_N][MAX_N];int steps[MAX_N][MAX_N]; bool check(int t) {   pair<int, int> mecho_pos, home_pos;   for(int i = 0; i < n; i++) {       for(int j = 0; j < n; j++) {           visited[i][j] = false;           steps[i][j] = n * n;           if(grid[i][j] == 'M') {               mecho_pos = {i, j};           }           if(grid[i][j] == 'D') {               home_pos = {i, j};           }       }   }   queue<pair<int, int>> q;   visited[mecho_pos.first][mecho_pos.second] = true;   steps[mecho_pos.first][mecho_pos.second] = 0;   q.push(mecho_pos);   while(!q.empty()) {       pair<int, int> curr = q.front();         q.pop();       if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M' || grid[curr.first + 1][curr.second] == 'D')) {           visited[curr.first + 1][curr.second] = true;           steps[curr.first + 1][curr.second] = steps[curr.first][curr.second] + 1;           q.push({curr.first + 1, curr.second});       }       if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M' || grid[curr.first - 1][curr.second] == 'D')) {           visited[curr.first - 1][curr.second] = true;           steps[curr.first - 1][curr.second] = steps[curr.first][curr.second] + 1;           q.push({curr.first - 1, curr.second});       }       if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M' || grid[curr.first][curr.second + 1] == 'D')) {           visited[curr.first][curr.second + 1] = true;           steps[curr.first][curr.second + 1] = steps[curr.first][curr.second] + 1;           q.push({curr.first, curr.second + 1});       }       if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M' || grid[curr.first][curr.second - 1] == 'D')) {           visited[curr.first][curr.second - 1] = true;           steps[curr.first][curr.second - 1] = steps[curr.first][curr.second] + 1;           q.push({curr.first, curr.second - 1});       }   }   for(int i = 0; i < n; i++) {       for(int j = 0; j < n; j++) {           visited[i][j] = false;       }   }   if(t + 1 > beed[mecho_pos.first][mecho_pos.second]) {       return false;   }   queue<pair<pair<int, int>, int>> newq;   visited[mecho_pos.first][mecho_pos.second] = true;   newq.push({mecho_pos, 0});   while(!newq.empty()) {       pair<pair<int, int>, int> curr = newq.front();         newq.pop();       int tmp = t + 1 + ((curr.second + 1) / (s + 1));       if(curr.first.first + 1 < n && tmp <= beed[curr.first.first + 1][curr.first.second] && !visited[curr.first.first + 1][curr.first.second] && (grid[curr.first.first + 1][curr.first.second] == 'G' || grid[curr.first.first + 1][curr.first.second] == 'M' || grid[curr.first.first + 1][curr.first.second] == 'D')) {           visited[curr.first.first + 1][curr.first.second] = true;           newq.push({{curr.first.first + 1, curr.first.second}, curr.second + 1});       }       if(curr.first.first - 1 >= 0 && tmp <= beed[curr.first.first - 1][curr.first.second] && !visited[curr.first.first - 1][curr.second] && (grid[curr.first.first - 1][curr.first.second] == 'G' || grid[curr.first.first - 1][curr.first.second] == 'M' || grid[curr.first.first - 1][curr.first.second] == 'D')) {           visited[curr.first.first - 1][curr.first.second] = true;           newq.push({{curr.first.first - 1, curr.first.second}, curr.second + 1});       }       if(curr.first.second + 1 < n && tmp <= beed[curr.first.first][curr.first.second + 1] && !visited[curr.first.first][curr.first.second + 1] && (grid[curr.first.first][curr.first.second + 1] == 'G' || grid[curr.first.first][curr.first.second + 1] == 'M' || grid[curr.first.first][curr.first.second + 1] == 'D')) {           visited[curr.first.first][curr.first.second + 1] = true;           newq.push({{curr.first.first, curr.first.second + 1}, curr.second + 1});       }       if(curr.first.second - 1 >= 0 && tmp <= beed[curr.first.first][curr.first.second - 1] && !visited[curr.first.first][curr.first.second - 1] && (grid[curr.first.first][curr.first.second - 1] == 'G' || grid[curr.first.first][curr.first.second - 1] == 'M' || grid[curr.first.first][curr.first.second - 1] == 'D')) {           visited[curr.first.first][curr.first.second - 1] = true;           newq.push({{curr.first.first, curr.first.second - 1}, curr.second + 1});       }   }   return visited[home_pos.first + 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first][home_pos.second + 1] || visited[home_pos.first][home_pos.second - 1];} int main() {   vector<pair<int, int>> hives;   cin >> n >> s;   for(int i = 0; i < n; i++) {       string tmp;       cin >> tmp;       for(int j = 0; j < n; j++) {           grid[i][j] = tmp[j];           if(grid[i][j] == 'H') {               hives.push_back({i, j});           }       }   }   queue<pair<int, int>> q;   for(auto iter : hives) {       visited[iter.first][iter.second] = true;       beed[iter.first][iter.second] = 0;       q.push(iter);   }   while(!q.empty()) {       pair<int, int> curr = q.front();         q.pop();       if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M')) {           visited[curr.first + 1][curr.second] = true;           beed[curr.first + 1][curr.second] = beed[curr.first][curr.second] + 1;           q.push({curr.first + 1, curr.second});       }       if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M')) {           visited[curr.first - 1][curr.second] = true;           beed[curr.first - 1][curr.second] = beed[curr.first][curr.second] + 1;           q.push({curr.first - 1, curr.second});       }       if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M')) {           visited[curr.first][curr.second + 1] = true;           beed[curr.first][curr.second + 1] = beed[curr.first][curr.second] + 1;           q.push({curr.first, curr.second + 1});       }       if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M')) {           visited[curr.first][curr.second - 1] = true;           beed[curr.first][curr.second - 1] = beed[curr.first][curr.second] + 1;           q.push({curr.first, curr.second - 1});       }   }   int l = 0, r = n * n;   int ans = -1;   // true true true ... (true) false false   while(l <= r) {       int mid = l + (r - l) / 2;       if(check(mid)) {           ans = mid;           l = mid + 1;       } else {           r = mid - 1;       }   }   cout << ans;   return 0;}#define MAX_N 801 using namespace std; int n, s;char grid[MAX_N][MAX_N];bool visited[MAX_N][MAX_N];int beed[MAX_N][MAX_N];int steps[MAX_N][MAX_N]; bool check(int t) { pair<int, int> mecho_pos, home_pos; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { visited[i][j] = false; steps[i][j] = n * n; if(grid[i][j] == 'M') { mecho_pos = {i, j}; } if(grid[i][j] == 'D') { home_pos = {i, j}; } } } queue<pair<int, int>> q; visited[mecho_pos.first][mecho_pos.second] = true; steps[mecho_pos.first][mecho_pos.second] = 0; q.push(mecho_pos); while(!q.empty()) { pair<int, int> curr = q.front(); q.pop(); if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M' || grid[curr.first + 1][curr.second] == 'D')) { visited[curr.first + 1][curr.second] = true; steps[curr.first + 1][curr.second] = steps[curr.first][curr.second] + 1; q.push({curr.first + 1, curr.second}); } if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M' || grid[curr.first - 1][curr.second] == 'D')) { visited[curr.first - 1][curr.second] = true; steps[curr.first - 1][curr.second] = steps[curr.first][curr.second] + 1; q.push({curr.first - 1, curr.second}); } if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M' || grid[curr.first][curr.second + 1] == 'D')) { visited[curr.first][curr.second + 1] = true; steps[curr.first][curr.second + 1] = steps[curr.first][curr.second] + 1; q.push({curr.first, curr.second + 1}); } if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M' || grid[curr.first][curr.second - 1] == 'D')) { visited[curr.first][curr.second - 1] = true; steps[curr.first][curr.second - 1] = steps[curr.first][curr.second] + 1; q.push({curr.first, curr.second - 1}); } } for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { visited[i][j] = false; } } if(t + 1 > beed[mecho_pos.first][mecho_pos.second]) { return false; } queue<pair<pair<int, int>, int>> newq; visited[mecho_pos.first][mecho_pos.second] = true; newq.push({mecho_pos, 0}); while(!newq.empty()) { pair<pair<int, int>, int> curr = newq.front(); newq.pop(); int tmp = t + 1 + ((curr.second + 1) / (s + 1)); if(curr.first.first + 1 < n && tmp <= beed[curr.first.first + 1][curr.first.second] && !visited[curr.first.first + 1][curr.first.second] && (grid[curr.first.first + 1][curr.first.second] == 'G' || grid[curr.first.first + 1][curr.first.second] == 'M' || grid[curr.first.first + 1][curr.first.second] == 'D')) { visited[curr.first.first + 1][curr.first.second] = true; newq.push({{curr.first.first + 1, curr.first.second}, curr.second + 1}); } if(curr.first.first - 1 >= 0 && tmp <= beed[curr.first.first - 1][curr.first.second] && !visited[curr.first.first - 1][curr.second] && (grid[curr.first.first - 1][curr.first.second] == 'G' || grid[curr.first.first - 1][curr.first.second] == 'M' || grid[curr.first.first - 1][curr.first.second] == 'D')) { visited[curr.first.first - 1][curr.first.second] = true; newq.push({{curr.first.first - 1, curr.first.second}, curr.second + 1}); } if(curr.first.second + 1 < n && tmp <= beed[curr.first.first][curr.first.second + 1] && !visited[curr.first.first][curr.first.second + 1] && (grid[curr.first.first][curr.first.second + 1] == 'G' || grid[curr.first.first][curr.first.second + 1] == 'M' || grid[curr.first.first][curr.first.second + 1] == 'D')) { visited[curr.first.first][curr.first.second + 1] = true; newq.push({{curr.first.first, curr.first.second + 1}, curr.second + 1}); } if(curr.first.second - 1 >= 0 && tmp <= beed[curr.first.first][curr.first.second - 1] && !visited[curr.first.first][curr.first.second - 1] && (grid[curr.first.first][curr.first.second - 1] == 'G' || grid[curr.first.first][curr.first.second - 1] == 'M' || grid[curr.first.first][curr.first.second - 1] == 'D')) { visited[curr.first.first][curr.first.second - 1] = true; newq.push({{curr.first.first, curr.first.second - 1}, curr.second + 1}); } } return visited[home_pos.first + 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first][home_pos.second + 1] || visited[home_pos.first][home_pos.second - 1];} int main() { vector<pair<int, int>> hives; cin >> n >> s; for(int i = 0; i < n; i++) { string tmp; cin >> tmp; for(int j = 0; j < n; j++) { grid[i][j] = tmp[j]; if(grid[i][j] == 'H') { hives.push_back({i, j}); } } } queue<pair<int, int>> q; for(auto iter : hives) { visited[iter.first][iter.second] = true; beed[iter.first][iter.second] = 0; q.push(iter); } while(!q.empty()) { pair<int, int> curr = q.front(); q.pop(); if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M')) { visited[curr.first + 1][curr.second] = true; beed[curr.first + 1][curr.second] = beed[curr.first][curr.second] + 1; q.push({curr.first + 1, curr.second}); } if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M')) { visited[curr.first - 1][curr.second] = true; beed[curr.first - 1][curr.second] = beed[curr.first][curr.second] + 1; q.push({curr.first - 1, curr.second}); } if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M')) { visited[curr.first][curr.second + 1] = true; beed[curr.first][curr.second + 1] = beed[curr.first][curr.second] + 1; q.push({curr.first, curr.second + 1}); } if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M')) { visited[curr.first][curr.second - 1] = true; beed[curr.first][curr.second - 1] = beed[curr.first][curr.second] + 1; q.push({curr.first, curr.second - 1}); } } int l = 0, r = n * n; int ans = -1; // true true true ... (true) false false while(l <= r) { int mid = l + (r - l) / 2; if(check(mid)) { ans = mid; l = mid + 1; } else { r = mid - 1; } } cout << ans; return 0;}

Compilation message (stderr)

mecho.cpp:4:129: error: extended character   is not valid in an identifier
    4 | int n, s;char grid[MAX_N][MAX_N];bool visited[MAX_N][MAX_N];int beed[MAX_N][MAX_N];int steps[MAX_N][MAX_N]; bool check(int t) {    pair<int, int> mecho_pos, home_pos;    for(int i = 0; i < n; i++) {        for(int j = 0; j < n; j++) {            visited[i][j] = false;            steps[i][j] = n * n;            if(grid[i][j] == 'M') {                mecho_pos = {i, j};            }            if(grid[i][j] == 'D') {                home_pos = {i, j};            }        }    }    queue<pair<int, int>> q;    visited[mecho_pos.first][mecho_pos.second] = true;    steps[mecho_pos.first][mecho_pos.second] = 0;    q.push(mecho_pos);    while(!q.empty()) {        pair<int, int> curr = q.front();         q.pop();        if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M' || grid[curr.first + 1][curr.second] == 'D')) {            visited[curr.first + 1][curr.second] = true;            steps[curr.first + 1][curr.second] = steps[curr.first][curr.second] + 1;            q.push({curr.first + 1, curr.second});        }        if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M' || grid[curr.first - 1][curr.second] == 'D')) {            visited[curr.first - 1][curr.second] = true;            steps[curr.first - 1][curr.second] = steps[curr.first][curr.second] + 1;            q.push({curr.first - 1, curr.second});        }        if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M' || grid[curr.first][curr.second + 1] == 'D')) {            visited[curr.first][curr.second + 1] = true;            steps[curr.first][curr.second + 1] = steps[curr.first][curr.second] + 1;            q.push({curr.first, curr.second + 1});        }        if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M' || grid[curr.first][curr.second - 1] == 'D')) {            visited[curr.first][curr.second - 1] = true;            steps[curr.first][curr.second - 1] = steps[curr.first][curr.second] + 1;            q.push({curr.first, curr.second - 1});        }    }    for(int i = 0; i < n; i++) {        for(int j = 0; j < n; j++) {            visited[i][j] = false;        }    }    if(t + 1 > beed[mecho_pos.first][mecho_pos.second]) {        return false;    }    queue<pair<pair<int, int>, int>> newq;    visited[mecho_pos.first][mecho_pos.second] = true;    newq.push({mecho_pos, 0});    while(!newq.empty()) {        pair<pair<int, int>, int> curr = newq.front();         newq.pop();        int tmp = t + 1 + (curr.second + 1) / s;        if(curr.first.first + 1 < n && tmp <= beed[curr.first.first + 1][curr.first.second] && !visited[curr.first.first + 1][curr.first.second] && (grid[curr.first.first + 1][curr.first.second] == 'G' || grid[curr.first.first + 1][curr.first.second] == 'M' || grid[curr.first.first + 1][curr.first.second] == 'D')) {            visited[curr.first.first + 1][curr.first.second] = true;            newq.push({{curr.first.first + 1, curr.first.second}, curr.second + 1});        }        if(curr.first.first - 1 >= 0 && tmp <= beed[curr.first.first - 1][curr.first.second] && !visited[curr.first.first - 1][curr.second] && (grid[curr.first.first - 1][curr.first.second] == 'G' || grid[curr.first.first - 1][curr.first.second] == 'M' || grid[curr.first.first - 1][curr.first.second] == 'D')) {            visited[curr.first.first - 1][curr.first.second] = true;            newq.push({{curr.first.first - 1, curr.first.second}, curr.second + 1});        }        if(curr.first.second + 1 < n && tmp <= beed[curr.first.first][curr.first.second + 1] && !visited[curr.first.first][curr.first.second + 1] && (grid[curr.first.first][curr.first.second + 1] == 'G' || grid[curr.first.first][curr.first.second + 1] == 'M' || grid[curr.first.first][curr.first.second + 1] == 'D')) {            visited[curr.first.first][curr.first.second + 1] = true;            newq.push({{curr.first.first, curr.first.second + 1}, curr.second + 1});        }        if(curr.first.second - 1 >= 0 && tmp <= beed[curr.first.first][curr.first.second - 1] && !visited[curr.first.first][curr.first.second - 1] && (grid[curr.first.first][curr.first.second - 1] == 'G' || grid[curr.first.first][curr.first.second - 1] == 'M' || grid[curr.first.first][curr.first.second - 1] == 'D')) {            visited[curr.first.first][curr.first.second - 1] = true;            newq.push({{curr.first.first, curr.first.second - 1}, curr.second + 1});        }    }    return visited[home_pos.first + 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first][home_pos.second + 1] || visited[home_pos.first][home_pos.second - 1];} int main() {    vector<pair<int, int>> hives;    cin >> n >> s;    for(int i = 0; i < n; i++) {        string tmp;        cin >> tmp;        for(int j = 0; j < n; j++) {            grid[i][j] = tmp[j];            if(grid[i][j] == 'H') {                hives.push_back({i, j});            }        }    }    queue<pair<int, int>> q;    for(auto iter : hives) {        visited[iter.first][iter.second] = true;        beed[iter.first][iter.second] = 0;        q.push(iter);    }    while(!q.empty()) {        pair<int, int> curr = q.front();         q.pop();        if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M')) {            visited[curr.first + 1][curr.second] = true;            beed[curr.first + 1][curr.second] = beed[curr.first][curr.second] + 1;            q.push({curr.first + 1, curr.second});        }        if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M')) {            visited[curr.first - 1][curr.second] = true;            beed[curr.first - 1][curr.second] = beed[curr.first][curr.second] + 1;            q.push({curr.first - 1, curr.second});        }        if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M')) {            visited[curr.first][curr.second + 1] = true;            beed[curr.first][curr.second + 1] = beed[curr.first][curr.second] + 1;            q.push({curr.first, curr.second + 1});        }        if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M')) {            visited[curr.first][curr.second - 1] = true;            beed[curr.first][curr.second - 1] = beed[curr.first][curr.second] + 1;            q.push({curr.first, curr.second - 1});        }    }    int l = 0, r = n * n;    int ans = -1;    // true true true ... (true) false false    while(l <= r) {        int mid = l + (r - l) / 2;        if(check(mid)) {            ans = mid;            l = mid + 1;        } else {            r = mid - 1;        }    }    cout << ans;    return 0;}#define MAX_N 801 using namespace std; int n, s;char grid[MAX_N][MAX_N];bool visited[MAX_N][MAX_N];int beed[MAX_N][MAX_N];int steps[MAX_N][MAX_N]; bool check(int t) {    pair<int, int> mecho_pos, home_pos;    for(int i = 0; i < n; i++) {        for(int j = 0; j < n; j++) {            visited[i][j] = false;            steps[i][j] = n * n;            if(grid[i][j] == 'M') {                mecho_pos = {i, j};            }            if(grid[i][j] == 'D') {                home_pos = {i, j};            }        }    }    queue<pair<int, int>> q;    visited[mecho_pos.first][mecho_pos.second] = true;    steps[mecho_pos.first][mecho_pos.second] = 0;    q.push(mecho_pos);    while(!q.empty()) {        pair<int, int> curr = q.front();         q.pop();        if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M' || grid[curr.first + 1][curr.second] == 'D')) {            visited[curr.first + 1][curr.second] = true;            steps[curr.first + 1][curr.second] = steps[curr.first][curr.second] + 1;            q.push({curr.first + 1, curr.second});        }        if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M' || grid[curr.first - 1][curr.second] == 'D')) {            visited[curr.first - 1][curr.second] = true;            steps[curr.first - 1][curr.second] = steps[curr.first][curr.second] + 1;            q.push({curr.first - 1, curr.second});        }        if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M' || grid[curr.first][curr.second + 1] == 'D')) {            visited[curr.first][curr.second + 1] = true;            steps[curr.first][curr.second + 1] = steps[curr.first][curr.second] + 1;            q.push({curr.first, curr.second + 1});        }        if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M' || grid[curr.first][curr.second - 1] == 'D')) {            visited[curr.first][curr.second - 1] = true;            steps[curr.first][curr.second - 1] = steps[curr.first][curr.second] + 1;            q.push({curr.first, curr.second - 1});        }    }    for(int i = 0; i < n; i++) {        for(int j = 0; j < n; j++) {            visited[i][j] = false;        }    }    if(t + 1 > beed[mecho_pos.first][mecho_pos.second]) {        return false;    }    queue<pair<pair<int, int>, int>> newq;    visited[mecho_pos.first][mecho_pos.second] = true;    newq.push({mecho_pos, 0});    while(!newq.empty()) {        pair<pair<int, int>, int> curr = newq.front();         newq.pop();        int tmp = t + 1 + ((curr.second + 1) / (s + 1));        if(curr.first.first + 1 < n && tmp <= beed[curr.first.first + 1][curr.first.second] && !visited[curr.first.first + 1][curr.first.second] && (grid[curr.first.first + 1][curr.first.second] == 'G' || grid[curr.first.first + 1][curr.first.second] == 'M' || grid[curr.first.first + 1][curr.first.second] == 'D')) {            visited[curr.first.first + 1][curr.first.second] = true;            newq.push({{curr.first.first + 1, curr.first.second}, curr.second + 1});        }        if(curr.first.first - 1 >= 0 && tmp <= beed[curr.first.first - 1][curr.first.second] && !visited[curr.first.first - 1][curr.second] && (grid[curr.first.first - 1][curr.first.second] == 'G' || grid[curr.first.first - 1][curr.first.second] == 'M' || grid[curr.first.first - 1][curr.first.second] == 'D')) {            visited[curr.first.first - 1][curr.first.second] = true;            newq.push({{curr.first.first - 1, curr.first.second}, curr.second + 1});        }        if(curr.first.second + 1 < n && tmp <= beed[curr.first.first][curr.first.second + 1] && !visited[curr.first.first][curr.first.second + 1] && (grid[curr.first.first][curr.first.second + 1] == 'G' || grid[curr.first.first][curr.first.second + 1] == 'M' || grid[curr.first.first][curr.first.second + 1] == 'D')) {            visited[curr.first.first][curr.first.second + 1] = true;            newq.push({{curr.first.first, curr.first.second + 1}, curr.second + 1});        }        if(curr.first.second - 1 >= 0 && tmp <= beed[curr.first.first][curr.first.second - 1] && !visited[curr.first.first][curr.first.second - 1] && (grid[curr.first.first][curr.first.second - 1] == 'G' || grid[curr.first.first][curr.first.second - 1] == 'M' || grid[curr.first.first][curr.first.second - 1] == 'D')) {            visited[curr.first.first][curr.first.second - 1] = true;            newq.push({{curr.first.first, curr.first.second - 1}, curr.second + 1});        }    }    return visited[home_pos.first + 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first][home_pos.second + 1] || visited[home_pos.first][home_pos.second - 1];} int main() {    vector<pair<int, int>> hives;    cin >> n >> s;    for(int i = 0; i < n; i++) {        string tmp;        cin >> tmp;        for(int j = 0; j < n; j++) {            grid[i][j] = tmp[j];            if(grid[i][j] == 'H') {                hives.push_back({i, j});            }        }    }    queue<pair<int, int>> q;    for(auto iter : hives) {        visited[iter.first][iter.second] = true;        beed[iter.first][iter.second] = 0;        q.push(iter);    }    while(!q.empty()) {        pair<int, int> curr = q.front();         q.pop();        if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M')) {            visited[curr.first + 1][curr.second] = true;            beed[curr.first + 1][curr.second] = beed[curr.first][curr.second] + 1;            q.push({curr.first + 1, curr.second});        }        if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M')) {            visited[curr.first - 1][curr.second] = true;            beed[curr.first - 1][curr.second] = beed[curr.first][curr.second] + 1;            q.push({curr.first - 1, curr.second});        }        if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M')) {            visited[curr.first][curr.second + 1] = true;            beed[curr.first][curr.second + 1] = beed[curr.first][curr.second] + 1;            q.push({curr.first, curr.second + 1});        }        if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M')) {            visited[curr.first][curr.second - 1] = true;            beed[curr.first][curr.second - 1] = beed[curr.first][curr.second] + 1;            q.push({curr.first, curr.second - 1});        }    }    int l = 0, r = n * n;    int ans = -1;  
      |                                                                                                                                 ^
mecho.cpp:4:169: error: extended character   is not valid in an identifier
    4 | int n, s;char grid[MAX_N][MAX_N];bool visited[MAX_N][MAX_N];int beed[MAX_N][MAX_N];int steps[MAX_N][MAX_N]; bool check(int t) {    pair<int, int> mecho_pos, home_pos;    for(int i = 0; i < n; i++) {        for(int j = 0; j < n; j++) {            visited[i][j] = false;            steps[i][j] = n * n;            if(grid[i][j] == 'M') {                mecho_pos = {i, j};            }            if(grid[i][j] == 'D') {                home_pos = {i, j};            }        }    }    queue<pair<int, int>> q;    visited[mecho_pos.first][mecho_pos.second] = true;    steps[mecho_pos.first][mecho_pos.second] = 0;    q.push(mecho_pos);    while(!q.empty()) {        pair<int, int> curr = q.front();         q.pop();        if(curr.first + 1 < n && !visited[curr.first + 1][curr.second] && (grid[curr.first + 1][curr.second] == 'G' || grid[curr.first + 1][curr.second] == 'M' || grid[curr.first + 1][curr.second] == 'D')) {            visited[curr.first + 1][curr.second] = true;            steps[curr.first + 1][curr.second] = steps[curr.first][curr.second] + 1;            q.push({curr.first + 1, curr.second});        }        if(curr.first - 1 >= 0 && !visited[curr.first - 1][curr.second] && (grid[curr.first - 1][curr.second] == 'G' || grid[curr.first - 1][curr.second] == 'M' || grid[curr.first - 1][curr.second] == 'D')) {            visited[curr.first - 1][curr.second] = true;            steps[curr.first - 1][curr.second] = steps[curr.first][curr.second] + 1;            q.push({curr.first - 1, curr.second});        }        if(curr.second + 1 < n && !visited[curr.first][curr.second + 1] && (grid[curr.first][curr.second + 1] == 'G' || grid[curr.first][curr.second + 1] == 'M' || grid[curr.first][curr.second + 1] == 'D')) {            visited[curr.first][curr.second + 1] = true;            steps[curr.first][curr.second + 1] = steps[curr.first][curr.second] + 1;            q.push({curr.first, curr.second + 1});        }        if(curr.second - 1 >= 0 && !visited[curr.first][curr.second - 1] && (grid[curr.first][curr.second - 1] == 'G' || grid[curr.first][curr.second - 1] == 'M' || grid[curr.first][curr.second - 1] == 'D')) {            visited[curr.first][curr.second - 1] = true;            steps[curr.first][curr.second - 1] = steps[curr.first][curr.second] + 1;            q.push({curr.first, curr.second - 1});        }    }    for(int i = 0; i < n; i++) {        for(int j = 0; j < n; j++) {            visited[i][j] = false;        }    }    if(t + 1 > beed[mecho_pos.first][mecho_pos.second]) {        return false;    }    queue<pair<pair<int, int>, int>> newq;    visited[mecho_pos.first][mecho_pos.second] = true;    newq.push({mecho_pos, 0});    while(!newq.empty()) {        pair<pair<int, int>, int> curr = newq.front();         newq.pop();        int tmp = t + 1 + (curr.second + 1) / s;        if(curr.first.first + 1 < n && tmp <= beed[curr.first.first + 1][curr.first.second] && !visited[curr.first.first + 1][curr.first.second] && (grid[curr.first.first + 1][curr.first.second] == 'G' || grid[curr.first.first + 1][curr.first.second] == 'M' || grid[curr.first.first + 1][curr.first.second] == 'D')) {            visited[curr.first.first + 1][curr.first.second] = true;            newq.push({{curr.first.first + 1, curr.first.second}, curr.second + 1});        }        if(curr.first.first - 1 >= 0 && tmp <= beed[curr.first.first - 1][curr.first.second] && !visited[curr.first.first - 1][curr.second] && (grid[curr.first.first - 1][curr.first.second] == 'G' || grid[curr.first.first - 1][curr.first.second] == 'M' || grid[curr.first.first - 1][curr.first.second] == 'D')) {            visited[curr.first.first - 1][curr.first.second] = true;            newq.push({{curr.first.first - 1, curr.first.second}, curr.second + 1});        }        if(curr.first.second + 1 < n && tmp <= beed[curr.first.first][curr.first.second + 1] && !visited[curr.first.first][curr.first.second + 1] && (grid[curr.first.first][curr.first.second + 1] == 'G' || grid[curr.first.first][curr.first.second + 1] == 'M' || grid[curr.first.first][curr.first.second + 1] == 'D')) {            visited[curr.first.first][curr.first.second + 1] = true;            newq.push({{curr.first.first, curr.first.second + 1}, curr.second + 1});        }        if(curr.first.second - 1 >= 0 && tmp <= beed[curr.first.first][curr.first.second - 1] && !visited[curr.first.first][curr.first.second - 1] && (grid[curr.first.first][curr.first.second - 1] == 'G' || grid[curr.first.first][curr.first.second - 1] == 'M' || grid[curr.first.first][curr.first.second - 1] == 'D')) {            visited[curr.first.first][curr.first.second - 1] = true;            newq.push({{curr.first.first, curr.first.second - 1}, curr.second + 1});        }    }    return visited[home_pos.first + 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first - 1][home_pos.second] || visited[home_pos.first][home_pos.second + 1] || visited[home_pos.first][home_pos.second - 1];} int main() {    vector<pair<int, int>> hives;    cin >> n >> s;    for(int i = 0; i < n; i++) {        string tmp;        cin >> tmp;        for(int j = 0; j < n; j++) {            grid[i][j] = tmp[j];            if(grid[i][j] == 'H') {                hives.push_back({i, j});            }