#include #include #include #include #include #include #include using namespace std; vector > grid; int calc(int x, int y) { int n = grid.size(); vector foods; for (int dx = -3; dx <= 3; ++dx) { for (int dy = -3; dy <= 3; ++dy) { if (dx == 0 && dy == 0) continue; if (abs(dx) + abs(dy) > 3) continue; int nx = x + dx; int ny = y + dy; if (nx >= 0 && nx < n && ny >= 0 && ny < n) { foods.push_back(grid[nx][ny]); } } } sort(foods.begin(), foods.end()); foods.push_back(grid[x][y]); reverse(foods.begin(), foods.end()); vector acc; acc.push_back(0); int t = 0; for (int i = 0; i < foods.size(); ++i) { t += foods[i]; acc.push_back(t); } while (acc.size() < 10) { acc.push_back(t); } int food = 0; // int dist = 1; int dist = 0; int p = 1; while (p < 9) { food += acc[p]; if (food >= 8 * p * p) { ++p; } ++dist; } return dist; } void process() { int n; int x, y; cin >> n >> x >> y; --x; --y; grid.clear(); for (int i = 0; i < n; ++i) { vector g(n); for (int j = 0; j < n; ++j) { cin >> g[j]; } grid.push_back(g); } int ans = -1; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { int t = calc(i, j); int d = abs(x - i) + abs(y - j); // cout << i << ' ' << j << " : " << t << endl; t += (d + 1)/2; // if (i == x && j == y) --t; if (ans == -1 || t < ans) ans = t; } } cout << ans << endl; /* int n; cin >> n; vector nums(n); string s; // NOTE: if using getline() to read the input, the following two lines should be // added to read the line sepeartor in the first line. getline(cin, s); getline(cin, s); stringstream S(s); */ } int main(void) { int T; cin >> T; for (int i = 1; i <= T; ++i) { process(); } return 0; }