#include <bits/stdc++.h>
using namespace std;
vector<int> findOptimalPair(int n, int m, vector<vector<int>> blockedPositions) {
vector<vector<int>> dist(n, vector<int>(m, -1));
vector<vector<int>> blocked(n, vector<int>(m, 0));
queue<pair<int,int>> q;
for (auto &b : blockedPositions) {
int x = b[0] - 1;
int y = b[1] - 1;
blocked[x][y] = 1;
dist[x][y] = 0;
q.push({x, y});
}
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
// Multi-source BFS computes exact Manhattan distance
while (!q.empty()) {
auto [x,y] = q.front();
q.pop();
for (int k=0;k<4;k++) {
int nx=x+dx[k];
int ny=y+dy[k];
if(nx<0||nx>=n||ny<0||ny>=m) continue;
if(dist[nx][ny]!=-1) continue;
dist[nx][ny]=dist[x][y]+1;
q.push({nx,ny});
}
}
auto check = [&](int limit)->int{
if(blocked[0][0] || blocked[n-1][m-1])
return -1;
if(dist[0][0] < limit || dist[n-1][m-1] < limit)
return -1;
vector<vector<int>> d(n, vector<int>(m,-1));
queue<pair<int,int>> qq;
qq.push({0,0});
d[0][0]=0;
while(!qq.empty()){
auto [x,y]=qq.front();
qq.pop();
for(int k=0;k<4;k++){
int nx=x+dx[k];
int ny=y+dy[k];
if(nx<0||nx>=n||ny<0||ny>=m)
continue;
if(blocked[nx][ny])
continue;
if(dist[nx][ny] < limit)
continue;
if(d[nx][ny]!=-1)
continue;
d[nx][ny]=d[x][y]+1;
qq.push({nx,ny});
}
}
if(d[n-1][m-1]==-1)
return -1;
return d[n-1][m-1]+1;
};
int hi=min(dist[0][0], dist[n-1][m-1]);
int lo=0;
int best=-1;
while(lo<=hi){
int mid=(lo+hi)/2;
if(check(mid)!=-1){
best=mid;
lo=mid+1;
}else{
hi=mid-1;
}
}
if(best==-1)
return {-1,-1};
return {best, check(best)};
}
int main() {
// Test Case from the prompt description
int n = 4;
int m = 3;
vector<vector<int>> blockedPositions = {{1, 3}, {2, 3}};
// int n = 3;
// int m = 3;
// vector<vector<int>> blockedPositions = {{1, 2}, {2, 1}, {2, 2}};
// int n = 4;
// int m = 4;
// vector<vector<int>> blockedPositions = {{1, 2}, {4, 3}};
vector<int> result = findOptimalPair(n, m, blockedPositions);
cout << "Maximum Strength: " << result[0] << endl;
cout << "Minimum Cells Visited: " << result[1] << endl;
// Expected Output:
// Maximum Strength: 2
// Minimum Cells Visited: 6
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBmaW5kT3B0aW1hbFBhaXIoaW50IG4sIGludCBtLCB2ZWN0b3I8dmVjdG9yPGludD4+IGJsb2NrZWRQb3NpdGlvbnMpIHsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZGlzdChuLCB2ZWN0b3I8aW50PihtLCAtMSkpOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBibG9ja2VkKG4sIHZlY3RvcjxpbnQ+KG0sIDApKTsKCiAgICBxdWV1ZTxwYWlyPGludCxpbnQ+PiBxOwoKICAgIGZvciAoYXV0byAmYiA6IGJsb2NrZWRQb3NpdGlvbnMpIHsKICAgICAgICBpbnQgeCA9IGJbMF0gLSAxOwogICAgICAgIGludCB5ID0gYlsxXSAtIDE7CiAgICAgICAgYmxvY2tlZFt4XVt5XSA9IDE7CiAgICAgICAgZGlzdFt4XVt5XSA9IDA7CiAgICAgICAgcS5wdXNoKHt4LCB5fSk7CiAgICB9CgogICAgaW50IGR4WzRdID0gey0xLDEsMCwwfTsKICAgIGludCBkeVs0XSA9IHswLDAsLTEsMX07CgogICAgLy8gTXVsdGktc291cmNlIEJGUyBjb21wdXRlcyBleGFjdCBNYW5oYXR0YW4gZGlzdGFuY2UKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgYXV0byBbeCx5XSA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwoKICAgICAgICBmb3IgKGludCBrPTA7azw0O2srKykgewogICAgICAgICAgICBpbnQgbng9eCtkeFtrXTsKICAgICAgICAgICAgaW50IG55PXkrZHlba107CgogICAgICAgICAgICBpZihueDwwfHxueD49bnx8bnk8MHx8bnk+PW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZihkaXN0W254XVtueV0hPS0xKSBjb250aW51ZTsKCiAgICAgICAgICAgIGRpc3RbbnhdW255XT1kaXN0W3hdW3ldKzE7CiAgICAgICAgICAgIHEucHVzaCh7bngsbnl9KTsKICAgICAgICB9CiAgICB9CgogICAgYXV0byBjaGVjayA9IFsmXShpbnQgbGltaXQpLT5pbnR7CgogICAgICAgIGlmKGJsb2NrZWRbMF1bMF0gfHwgYmxvY2tlZFtuLTFdW20tMV0pCiAgICAgICAgICAgIHJldHVybiAtMTsKCiAgICAgICAgaWYoZGlzdFswXVswXSA8IGxpbWl0IHx8IGRpc3Rbbi0xXVttLTFdIDwgbGltaXQpCiAgICAgICAgICAgIHJldHVybiAtMTsKCiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBkKG4sIHZlY3RvcjxpbnQ+KG0sLTEpKTsKCiAgICAgICAgcXVldWU8cGFpcjxpbnQsaW50Pj4gcXE7CiAgICAgICAgcXEucHVzaCh7MCwwfSk7CiAgICAgICAgZFswXVswXT0wOwoKICAgICAgICB3aGlsZSghcXEuZW1wdHkoKSl7CgogICAgICAgICAgICBhdXRvIFt4LHldPXFxLmZyb250KCk7CiAgICAgICAgICAgIHFxLnBvcCgpOwoKICAgICAgICAgICAgZm9yKGludCBrPTA7azw0O2srKyl7CgogICAgICAgICAgICAgICAgaW50IG54PXgrZHhba107CiAgICAgICAgICAgICAgICBpbnQgbnk9eStkeVtrXTsKCiAgICAgICAgICAgICAgICBpZihueDwwfHxueD49bnx8bnk8MHx8bnk+PW0pCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgaWYoYmxvY2tlZFtueF1bbnldKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIGlmKGRpc3RbbnhdW255XSA8IGxpbWl0KQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIGlmKGRbbnhdW255XSE9LTEpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgZFtueF1bbnldPWRbeF1beV0rMTsKICAgICAgICAgICAgICAgIHFxLnB1c2goe254LG55fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKGRbbi0xXVttLTFdPT0tMSkKICAgICAgICAgICAgcmV0dXJuIC0xOwoKICAgICAgICByZXR1cm4gZFtuLTFdW20tMV0rMTsKICAgIH07CgogICAgaW50IGhpPW1pbihkaXN0WzBdWzBdLCBkaXN0W24tMV1bbS0xXSk7CiAgICBpbnQgbG89MDsKICAgIGludCBiZXN0PS0xOwoKICAgIHdoaWxlKGxvPD1oaSl7CgogICAgICAgIGludCBtaWQ9KGxvK2hpKS8yOwoKICAgICAgICBpZihjaGVjayhtaWQpIT0tMSl7CiAgICAgICAgICAgIGJlc3Q9bWlkOwogICAgICAgICAgICBsbz1taWQrMTsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgaGk9bWlkLTE7CiAgICAgICAgfQogICAgfQoKICAgIGlmKGJlc3Q9PS0xKQogICAgICAgIHJldHVybiB7LTEsLTF9OwoKICAgIHJldHVybiB7YmVzdCwgY2hlY2soYmVzdCl9Owp9CgppbnQgbWFpbigpIHsKICAgIC8vIFRlc3QgQ2FzZSBmcm9tIHRoZSBwcm9tcHQgZGVzY3JpcHRpb24KICAgIGludCBuID0gNDsKICAgIGludCBtID0gMzsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gYmxvY2tlZFBvc2l0aW9ucyA9IHt7MSwgM30sIHsyLCAzfX07CiAgICAKICAgIC8vIGludCBuID0gMzsKICAgIC8vIGludCBtID0gMzsKICAgIC8vIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gYmxvY2tlZFBvc2l0aW9ucyA9IHt7MSwgMn0sIHsyLCAxfSwgezIsIDJ9fTsKICAgIAogICAgLy8gaW50IG4gPSA0OwogICAgLy8gaW50IG0gPSA0OwogICAgLy8gdmVjdG9yPHZlY3RvcjxpbnQ+PiBibG9ja2VkUG9zaXRpb25zID0ge3sxLCAyfSwgezQsIDN9fTsKCiAgICB2ZWN0b3I8aW50PiByZXN1bHQgPSBmaW5kT3B0aW1hbFBhaXIobiwgbSwgYmxvY2tlZFBvc2l0aW9ucyk7CgogICAgY291dCA8PCAiTWF4aW11bSBTdHJlbmd0aDogIiA8PCByZXN1bHRbMF0gPDwgZW5kbDsKICAgIGNvdXQgPDwgIk1pbmltdW0gQ2VsbHMgVmlzaXRlZDogIiA8PCByZXN1bHRbMV0gPDwgZW5kbDsKCiAgICAvLyBFeHBlY3RlZCBPdXRwdXQ6CiAgICAvLyBNYXhpbXVtIFN0cmVuZ3RoOiAyCiAgICAvLyBNaW5pbXVtIENlbGxzIFZpc2l0ZWQ6IDYKCiAgICByZXR1cm4gMDsKfQ==