#include <bits/stdc++.h> using namespace std; #define st first #define nd second #define iamspeed ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, m, k, t[2005][2005], vis[2005][2005], tyl[2005][2005], res = LLONG_MAX, il = 1, tempres, tylres; string s[2005]; pair<long long, long long> p[1000006], x; queue<pair<long long, long long> > Q; int main() { iamspeed; ios_base :: sync_with_stdio(0); cin >> n >> m >> k; for(int i = 1 ; i <= n ; i++) { cin >> s[i]; for(int j = 0 ; j < m ; j++) { if(s[i][j] == '.') { t[i][j + 1] = 1; } else { t[i][j + 1] = 0; } } } for(int i = 1 ; i <= k ; i++) { cin >> p[i].st >> p[i].nd; } Q.push(make_pair(1, 1)); vis[1][1] = 1; while(Q.front().st != n || Q.front().nd != m) { x = Q.front(); Q.pop(); if(t[x.st - 1][x.nd] == 1 && vis[x.st - 1][x.nd] == 0) { Q.push(make_pair(x.st - 1, x.nd)); vis[x.st - 1][x.nd] = 1; tyl[x.st - 1][x.nd] = tyl[x.st][x.nd] + 1; } if(t[x.st][x.nd - 1] == 1 && vis[x.st][x.nd - 1] == 0) { Q.push(make_pair(x.st, x.nd - 1)); vis[x.st][x.nd - 1] = 1; tyl[x.st][x.nd - 1] = tyl[x.st][x.nd] + 1; } if(t[x.st + 1][x.nd] == 1 && vis[x.st + 1][x.nd] == 0) { Q.push(make_pair(x.st + 1, x.nd)); vis[x.st + 1][x.nd] = 1; tyl[x.st + 1][x.nd] = tyl[x.st][x.nd]; } if(t[x.st][x.nd + 1] == 1 && vis[x.st][x.nd + 1] == 0) { Q.push(make_pair(x.st, x.nd + 1)); vis[x.st][x.nd + 1] = 1; tyl[x.st][x.nd + 1] = tyl[x.st][x.nd]; } } tylres = tyl[Q.front().st][Q.front().nd]; for(int i = 1 ; i <= k ; i++) { tempres = ((tylres + n + m - 2) * p[i].st) + (tylres * p[i].nd); if(tempres < res) { il = 1; res = tempres; } else if(tempres == res) { il++; } } cout << res << " " << il << endl; }
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 80 81 82 83 | #include <bits/stdc++.h> using namespace std; #define st first #define nd second #define iamspeed ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, m, k, t[2005][2005], vis[2005][2005], tyl[2005][2005], res = LLONG_MAX, il = 1, tempres, tylres; string s[2005]; pair<long long, long long> p[1000006], x; queue<pair<long long, long long> > Q; int main() { iamspeed; ios_base :: sync_with_stdio(0); cin >> n >> m >> k; for(int i = 1 ; i <= n ; i++) { cin >> s[i]; for(int j = 0 ; j < m ; j++) { if(s[i][j] == '.') { t[i][j + 1] = 1; } else { t[i][j + 1] = 0; } } } for(int i = 1 ; i <= k ; i++) { cin >> p[i].st >> p[i].nd; } Q.push(make_pair(1, 1)); vis[1][1] = 1; while(Q.front().st != n || Q.front().nd != m) { x = Q.front(); Q.pop(); if(t[x.st - 1][x.nd] == 1 && vis[x.st - 1][x.nd] == 0) { Q.push(make_pair(x.st - 1, x.nd)); vis[x.st - 1][x.nd] = 1; tyl[x.st - 1][x.nd] = tyl[x.st][x.nd] + 1; } if(t[x.st][x.nd - 1] == 1 && vis[x.st][x.nd - 1] == 0) { Q.push(make_pair(x.st, x.nd - 1)); vis[x.st][x.nd - 1] = 1; tyl[x.st][x.nd - 1] = tyl[x.st][x.nd] + 1; } if(t[x.st + 1][x.nd] == 1 && vis[x.st + 1][x.nd] == 0) { Q.push(make_pair(x.st + 1, x.nd)); vis[x.st + 1][x.nd] = 1; tyl[x.st + 1][x.nd] = tyl[x.st][x.nd]; } if(t[x.st][x.nd + 1] == 1 && vis[x.st][x.nd + 1] == 0) { Q.push(make_pair(x.st, x.nd + 1)); vis[x.st][x.nd + 1] = 1; tyl[x.st][x.nd + 1] = tyl[x.st][x.nd]; } } tylres = tyl[Q.front().st][Q.front().nd]; for(int i = 1 ; i <= k ; i++) { tempres = ((tylres + n + m - 2) * p[i].st) + (tylres * p[i].nd); if(tempres < res) { il = 1; res = tempres; } else if(tempres == res) { il++; } } cout << res << " " << il << endl; } |