#include <bits/stdc++.h> #define thicc(boi) boi.size() #define magiczne ios_base::sync_with_stdio(0); #define linijki cin.tie(NULL); #define f first #define s second using namespace std; typedef pair <long long int, long long int> pii; long long int cf[2007][2007]; vector <pii> xd[2007][2007]; pii lol[1000007]; bool visit[2007][2007]; queue <pii> q; long long int depth[2007][2007]; void BFS(pii v) { visit[v.f][v.s] = true; for (auto x : xd[v.f][v.s]) if (!visit[x.f][x.s]) { depth[x.f][x.s] = depth[v.f][v.s] + 1; q.push(x); } } int main() { magiczne linijki; long long int n, m, k; char oof; cin >> n >> m >> k; for (int i = 0;i<n;i++) { for (int j = 0;j<m;j++) { cin >> oof; cf[i][j] = (oof == '.' ? 1 : 0); if (!cf[i][j]) continue; if (i > 0) if (cf[i - 1][j] == 1) { xd[i][j].emplace_back(i - 1, j); xd[i - 1][j].emplace_back(i, j); } if (j > 0) if (cf[i][j - 1] == 1) { xd[i][j].emplace_back(i, j - 1); xd[i][j - 1].emplace_back(i, j); } } } for (int i = 0;i<k;i++) cin >> lol[i].f >> lol[i].s; q.emplace(0, 0); while (thicc(q)) { BFS(q.front()); q.pop(); } long long int res = LLONG_MAX, c, res2 = 1; for (int i = 0;i<k;i++) { c = (depth[n - 1][m - 1] - (n + m - 2))/2 * (lol[i].f + lol[i].s) + lol[i].f * (n + m - 2); if (res == c) res2++; else if (res > c) { res2 = 1; res = c; } } cout << res << ' ' << res2 << '\n'; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <bits/stdc++.h> #define thicc(boi) boi.size() #define magiczne ios_base::sync_with_stdio(0); #define linijki cin.tie(NULL); #define f first #define s second using namespace std; typedef pair <long long int, long long int> pii; long long int cf[2007][2007]; vector <pii> xd[2007][2007]; pii lol[1000007]; bool visit[2007][2007]; queue <pii> q; long long int depth[2007][2007]; void BFS(pii v) { visit[v.f][v.s] = true; for (auto x : xd[v.f][v.s]) if (!visit[x.f][x.s]) { depth[x.f][x.s] = depth[v.f][v.s] + 1; q.push(x); } } int main() { magiczne linijki; long long int n, m, k; char oof; cin >> n >> m >> k; for (int i = 0;i<n;i++) { for (int j = 0;j<m;j++) { cin >> oof; cf[i][j] = (oof == '.' ? 1 : 0); if (!cf[i][j]) continue; if (i > 0) if (cf[i - 1][j] == 1) { xd[i][j].emplace_back(i - 1, j); xd[i - 1][j].emplace_back(i, j); } if (j > 0) if (cf[i][j - 1] == 1) { xd[i][j].emplace_back(i, j - 1); xd[i][j - 1].emplace_back(i, j); } } } for (int i = 0;i<k;i++) cin >> lol[i].f >> lol[i].s; q.emplace(0, 0); while (thicc(q)) { BFS(q.front()); q.pop(); } long long int res = LLONG_MAX, c, res2 = 1; for (int i = 0;i<k;i++) { c = (depth[n - 1][m - 1] - (n + m - 2))/2 * (lol[i].f + lol[i].s) + lol[i].f * (n + m - 2); if (res == c) res2++; else if (res > c) { res2 = 1; res = c; } } cout << res << ' ' << res2 << '\n'; return 0; } |