#include<bits/stdc++.h> #define int long long using namespace std; int a,b,pa; char c; queue <pair<int,int> > Q; pair<int,int> ob; int Pole[2004][2004],P[2004][2004],L[2004][2004],G[2004][2004],D[2004][2004],odw[2004][2004]; main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); cin >> a >> b >> pa; for (int i = 1 ; i <= a ; i++) { for (int j = 1 ; j <= b ; j++) { cin >> c; if(c=='X') Pole[i][j] = 1; } } Q.push({1,1}); odw[1][1] = 1; while(!Q.empty()) { ob = Q.front(); Q.pop(); int x = ob.first; int y = ob.second; if(odw[x+1][y] == 0 && Pole[x+1][y] == 0 && x+1 <= a) { Q.push({x+1,y}); odw[x+1][y] = 1; P[x+1][y] = P[x][y]; L[x+1][y] = L[x][y]; G[x+1][y] = G[x][y]; D[x+1][y] = D[x][y] + 1; } //idziemy w gore if(odw[x-1][y] == 0 && Pole[x-1][y] == 0 && x-1 > 0) { Q.push({x-1,y}); odw[x-1][y] = 1; P[x-1][y] = P[x][y]; L[x-1][y] = L[x][y]; G[x-1][y] = G[x][y] + 1; D[x-1][y] = D[x][y]; } //idziemy w lewo if(odw[x][y-1] == 0 && Pole[x][y-1] == 0 && y-1 > 0) { Q.push({x,y-1}); odw[x][y-1] = 1; P[x][y-1] = P[x][y]; L[x][y-1] = L[x][y] + 1; G[x][y-1] = G[x][y]; D[x][y-1] = D[x][y]; } //idziemy w prawo if(odw[x][y+1] == 0 && Pole[x][y+1] == 0 && y+1 <= b) { Q.push({x,y+1}); odw[x][y+1] = 1; P[x][y+1] = P[x][y] + 1; L[x][y+1] = L[x][y]; G[x][y+1] = G[x][y]; D[x][y+1] = D[x][y]; } } int maxw = LONG_LONG_MAX; int liczba = 0; for (int i = 1 ; i <= pa ; i++) { int x; int y; cin >> x >> y; int temp = x*(P[a][b] + D[a][b]) + y*(L[a][b]+G[a][b]); if(temp < maxw) { maxw = temp; liczba = 1; } else if(temp == maxw) liczba++; } cout << maxw <<" "<<liczba; //cout << P[a][b] << " " << L[a][b] << " "<<G[a][b] << " " << D[a][b]; }
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 84 85 86 87 88 89 90 91 92 93 94 | #include<bits/stdc++.h> #define int long long using namespace std; int a,b,pa; char c; queue <pair<int,int> > Q; pair<int,int> ob; int Pole[2004][2004],P[2004][2004],L[2004][2004],G[2004][2004],D[2004][2004],odw[2004][2004]; main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); cin >> a >> b >> pa; for (int i = 1 ; i <= a ; i++) { for (int j = 1 ; j <= b ; j++) { cin >> c; if(c=='X') Pole[i][j] = 1; } } Q.push({1,1}); odw[1][1] = 1; while(!Q.empty()) { ob = Q.front(); Q.pop(); int x = ob.first; int y = ob.second; if(odw[x+1][y] == 0 && Pole[x+1][y] == 0 && x+1 <= a) { Q.push({x+1,y}); odw[x+1][y] = 1; P[x+1][y] = P[x][y]; L[x+1][y] = L[x][y]; G[x+1][y] = G[x][y]; D[x+1][y] = D[x][y] + 1; } //idziemy w gore if(odw[x-1][y] == 0 && Pole[x-1][y] == 0 && x-1 > 0) { Q.push({x-1,y}); odw[x-1][y] = 1; P[x-1][y] = P[x][y]; L[x-1][y] = L[x][y]; G[x-1][y] = G[x][y] + 1; D[x-1][y] = D[x][y]; } //idziemy w lewo if(odw[x][y-1] == 0 && Pole[x][y-1] == 0 && y-1 > 0) { Q.push({x,y-1}); odw[x][y-1] = 1; P[x][y-1] = P[x][y]; L[x][y-1] = L[x][y] + 1; G[x][y-1] = G[x][y]; D[x][y-1] = D[x][y]; } //idziemy w prawo if(odw[x][y+1] == 0 && Pole[x][y+1] == 0 && y+1 <= b) { Q.push({x,y+1}); odw[x][y+1] = 1; P[x][y+1] = P[x][y] + 1; L[x][y+1] = L[x][y]; G[x][y+1] = G[x][y]; D[x][y+1] = D[x][y]; } } int maxw = LONG_LONG_MAX; int liczba = 0; for (int i = 1 ; i <= pa ; i++) { int x; int y; cin >> x >> y; int temp = x*(P[a][b] + D[a][b]) + y*(L[a][b]+G[a][b]); if(temp < maxw) { maxw = temp; liczba = 1; } else if(temp == maxw) liczba++; } cout << maxw <<" "<<liczba; //cout << P[a][b] << " " << L[a][b] << " "<<G[a][b] << " " << D[a][b]; } |