#include <cstdio> #include <queue> #include <algorithm> using namespace std; char MAP[2000][2001]; int D[2000][2000]; int N, M, K; long long PPL[1000000]; deque<pair<int, int>> q; void add(const pair<int, int>& p, int d) { if (not(0 <= p.first && p.first < N && 0 <= p.second && p.second < M)) return; if (MAP[p.first][p.second] != '.') return; MAP[p.first][p.second] = '#'; D[p.first][p.second] = d; q.push_back(p); } int main() { scanf("%d%d%d", &N, &M, &K); for (int i = 0; i < N; i++) scanf("%s", MAP[i]); add(make_pair(0, 0), 0); while (not q.empty()) { auto a = q.front(); q.pop_front(); int d = D[a.first][a.second] + 1; a.first--; add(a, d); a.first+=2; add(a, d); a.first--, a.second--; add(a, d); a.second+=2; add(a, d); } long long d2 = (D[N-1][M-1] - (N+M-2))/2; for (int i = 0; i < K; i++) { int a, b; scanf("%d%d", &a, &b); PPL[i] = (d2 + N+M-2) * a + d2 * b; } sort(PPL, PPL+K); printf("%lld %d\n", PPL[0], count(PPL, PPL+K, PPL[0])); 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 | #include <cstdio> #include <queue> #include <algorithm> using namespace std; char MAP[2000][2001]; int D[2000][2000]; int N, M, K; long long PPL[1000000]; deque<pair<int, int>> q; void add(const pair<int, int>& p, int d) { if (not(0 <= p.first && p.first < N && 0 <= p.second && p.second < M)) return; if (MAP[p.first][p.second] != '.') return; MAP[p.first][p.second] = '#'; D[p.first][p.second] = d; q.push_back(p); } int main() { scanf("%d%d%d", &N, &M, &K); for (int i = 0; i < N; i++) scanf("%s", MAP[i]); add(make_pair(0, 0), 0); while (not q.empty()) { auto a = q.front(); q.pop_front(); int d = D[a.first][a.second] + 1; a.first--; add(a, d); a.first+=2; add(a, d); a.first--, a.second--; add(a, d); a.second+=2; add(a, d); } long long d2 = (D[N-1][M-1] - (N+M-2))/2; for (int i = 0; i < K; i++) { int a, b; scanf("%d%d", &a, &b); PPL[i] = (d2 + N+M-2) * a + d2 * b; } sort(PPL, PPL+K); printf("%lld %d\n", PPL[0], count(PPL, PPL+K, PPL[0])); return 0; } |