#include using namespace std; template void Gauss(vector > a, vector &ans) { int n = a.size(), m = a[0].size() - 1; for (int i = 0; i < m; i++) { for (int j = i; j < n; j++) if (a[j][i + 1] != 0) { if (a[i][i + 1] == 0) { for (int k = 0; k <= m; k++) swap(a[i][k], a[j][k]); } } for (int j = i + 1; j < n; j++) if (a[j][i + 1] != 0) { T p = a[j][i + 1] / a[i][i + 1]; for (int k = 0; k <= m; k++) { a[j][k] = a[j][k] - a[i][k] * p; } } } for (int i = n - 1; i >= 0; i--) if (a[i][i + 1] != 0) { ans[i] = a[i][0] / a[i][i + 1]; for (int j = 0; j < i; j++) { a[j][0] = a[j][0] - a[j][i + 1] * ans[i]; } } } const int dx4[4] = {0, 0, 1, -1}; const int dy4[4] = {1, -1, 0, 0}; int main() { int n, m, k; cin >> n >> m >> k; vector a(n); for (int i = 0; i < n; i++) cin >> a[i]; vector > b(n, vector(m)); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) b[i][j] = i * m + j + 1; while (k --) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; b[x1 - 1][y1 - 1] = (x2 - 1) * m + y2; b[x2 - 1][y2 - 1] = (x1 - 1) * m + y1; } // Write Your Code Here int init; vector > c(n * m, vector(n * m + 1, 0)); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { c[i * m + j][i * m + j + 1] = 1; if (a[i][j] == '%') c[i * m + j][0] = 1; if (a[i][j] == 'O' || a[i][j] == 'A') { if (a[i][j] == 'A') init = i * m + j; int cnt = 0; for (int k = 0; k < 4; k++) { int x = i + dx4[k]; int y = j + dy4[k]; if (x < 0 || y < 0 || x == n || y == m || a[x][y] == '#') continue; cnt ++; } for (int k = 0; k < 4; k++) { int x = i + dx4[k]; int y = j + dy4[k]; if (x < 0 || y < 0 || x == n || y == m || a[x][y] == '#') continue; c[i * m + j][b[x][y]] = -1.0 / cnt; } } // for (int t = 0; t <= n * m; t++) cout << c[i * m + j][t] << ' '; // cout << endl; } vector ans(n * m); Gauss(c, ans); //for (int i = 0; i < n * m; i++) cout << ans[i] << endl; cout << ans[init] << endl; return 0; }