#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/*
You are given an m x n grid where each cell can have one of three values:
0 representing an empty cell,
1 representing a fresh orange, or
2 representing a rotten orange.
Every minute, any fresh orange that is 4-directionally adjacent to a rotten orange becomes rotten.
Return the minimum number of minutes that must elapse until no cell has a fresh orange. If this is impossible, return -1.
*/
int minutes(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int fo = 0, temp; // fresh oranges
vector<vector<int>> visited = grid;
queue<pair<int,int>> qq;
for (int i=0;i<m;i++) {
for (int j=0;j<n;j++) {
if (visited[i][j]==2)
qq.push({i, j});
if (visited[i][j]==1)
fo++;
}
}
if (fo==0) return 0; // no fresh oranges
if (qq.empty()) return -1; // no rotten oranges
int ans = -1;
vector<vector<int>> dirs = {{1,0}, {-1,0}, {0,1}, {0,-1}};
while (!qq.empty()) {
temp = qq.size();
while (temp--) {
auto [x,y] = qq.front();
qq.pop();
for (auto it: dirs) {
int i = x+it[0];
int j = y+it[1];
if (i>=0 && i<m && j>=0 && j<n && visited[i][j]==1) {
visited[i][j] = 2;
fo--;
qq.push({i,j});
}
}
}
ans++;
}
if (fo!=0) return -1;
else return ans;
}
int main() {
cout<<"Hello World!\n";
vector<vector<int>> grid = {
{0,0,0},
{0,0,0},
{0,0,0},
};
cout<<minutes(grid);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qCllvdSBhcmUgZ2l2ZW4gYW4gbSB4IG4gZ3JpZCB3aGVyZSBlYWNoIGNlbGwgY2FuIGhhdmUgb25lIG9mIHRocmVlIHZhbHVlczoKCjAgcmVwcmVzZW50aW5nIGFuIGVtcHR5IGNlbGwsCjEgcmVwcmVzZW50aW5nIGEgZnJlc2ggb3JhbmdlLCBvcgoyIHJlcHJlc2VudGluZyBhIHJvdHRlbiBvcmFuZ2UuCkV2ZXJ5IG1pbnV0ZSwgYW55IGZyZXNoIG9yYW5nZSB0aGF0IGlzIDQtZGlyZWN0aW9uYWxseSBhZGphY2VudCB0byBhIHJvdHRlbiBvcmFuZ2UgYmVjb21lcyByb3R0ZW4uCgpSZXR1cm4gdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1pbnV0ZXMgdGhhdCBtdXN0IGVsYXBzZSB1bnRpbCBubyBjZWxsIGhhcyBhIGZyZXNoIG9yYW5nZS4gSWYgdGhpcyBpcyBpbXBvc3NpYmxlLCByZXR1cm4gLTEuCiovCgoKaW50IG1pbnV0ZXModmVjdG9yPHZlY3RvcjxpbnQ+PiYgZ3JpZCkgewogICAgaW50IG0gPSBncmlkLnNpemUoKTsKICAgIGludCBuID0gZ3JpZFswXS5zaXplKCk7CiAgICBpbnQgZm8gPSAwLCB0ZW1wOyAvLyBmcmVzaCBvcmFuZ2VzCgogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiB2aXNpdGVkID0gZ3JpZDsKICAgIHF1ZXVlPHBhaXI8aW50LGludD4+IHFxOwoKICAgIGZvciAoaW50IGk9MDtpPG07aSsrKSB7CiAgICAgICAgZm9yIChpbnQgaj0wO2o8bjtqKyspIHsKICAgICAgICAgICAgaWYgKHZpc2l0ZWRbaV1bal09PTIpIAogICAgICAgICAgICAgICAgcXEucHVzaCh7aSwgan0pOwogICAgICAgICAgICBpZiAodmlzaXRlZFtpXVtqXT09MSkKICAgICAgICAgICAgICAgIGZvKys7CiAgICAgICAgfSAgIAogICAgfQoKICAgIGlmIChmbz09MCkgcmV0dXJuIDA7IC8vIG5vIGZyZXNoIG9yYW5nZXMKICAgIGlmIChxcS5lbXB0eSgpKSByZXR1cm4gLTE7IC8vIG5vIHJvdHRlbiBvcmFuZ2VzCgogICAgaW50IGFucyA9IC0xOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBkaXJzID0ge3sxLDB9LCB7LTEsMH0sIHswLDF9LCB7MCwtMX19OwogICAgd2hpbGUgKCFxcS5lbXB0eSgpKSB7CiAgICAgICAgdGVtcCA9IHFxLnNpemUoKTsKICAgICAgICB3aGlsZSAodGVtcC0tKSB7CiAgICAgICAgICAgIGF1dG8gW3gseV0gPSBxcS5mcm9udCgpOwogICAgICAgICAgICBxcS5wb3AoKTsKICAgICAgICAgICAgZm9yIChhdXRvIGl0OiBkaXJzKSB7CiAgICAgICAgICAgICAgICBpbnQgaSA9IHgraXRbMF07CiAgICAgICAgICAgICAgICBpbnQgaiA9IHkraXRbMV07CiAgICAgICAgICAgICAgICBpZiAoaT49MCAmJiBpPG0gJiYgaj49MCAmJiBqPG4gJiYgdmlzaXRlZFtpXVtqXT09MSkgewogICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRbaV1bal0gPSAyOwogICAgICAgICAgICAgICAgICAgIGZvLS07CiAgICAgICAgICAgICAgICAgICAgcXEucHVzaCh7aSxqfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYW5zKys7CiAgICB9CgogICAgaWYgKGZvIT0wKSByZXR1cm4gLTE7CiAgICBlbHNlIHJldHVybiBhbnM7Cgp9CgoKaW50IG1haW4oKSB7CiAgICBjb3V0PDwiSGVsbG8gV29ybGQhXG4iOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBncmlkID0gewogICAgICAgIHswLDAsMH0sCiAgICAgICAgezAsMCwwfSwKICAgICAgICB7MCwwLDB9LAogICAgfTsKICAgIGNvdXQ8PG1pbnV0ZXMoZ3JpZCk7Cn0K