#include<bits/stdc++.h> using namespace std; #define f first #define s second int n, m, k; pair<int, int> tab[2005][2005]; int dist[2005][2005]; bool visited[2005][2005]; bool czy(int x, int y){ if(x<0 || x>=n || y<0 || y>=m || visited[x][y]==1)return false; return true; } void bfs() { queue<pair<int, int> > kol; kol.push({0, 0}); while(!kol.empty()) { pair<int, int> v=kol.front(); int x=v.f, y=v.s; kol.pop(); visited[x][y]=true; if(czy(x-1, y)){ tab[x-1][y]={tab[x][y].f+1, tab[x][y].s}; visited[x-1][y]=true; kol.push({x-1, y}); } if(czy(x, y-1)){ tab[x][y-1]={tab[x][y].f+1, tab[x][y].s}; visited[x][y-1]=true; kol.push({x, y-1}); } if(czy(x+1, y)){ tab[x+1][y]={tab[x][y].f, tab[x][y].s+1}; visited[x+1][y]=true; kol.push({x+1, y}); } if(czy(x, y+1)){ tab[x][y+1]={tab[x][y].f, tab[x][y].s+1}; visited[x][y+1]=true; kol.push({x, y+1}); } } return; } int main(){ cin>>n>>m>>k; char c; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin>>c; if(c=='.')visited[i][j]=0; else visited[i][j]=1; } } bfs(); long long wyn=1e18; long long a, b; int ile=0; long long wej=(long long)tab[n-1][m-1].s; long long zej=(long long)tab[n-1][m-1].f; for(int i=0; i<k; i++){ cin>>a>>b; if(wej*a+zej*b<wyn){ wyn=wej*a+zej*b; ile=1; } else if(wej*a+zej*b==wyn)ile++; } cout<<wyn<<" "<<ile; 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 80 81 82 83 84 85 86 87 88 | #include<bits/stdc++.h> using namespace std; #define f first #define s second int n, m, k; pair<int, int> tab[2005][2005]; int dist[2005][2005]; bool visited[2005][2005]; bool czy(int x, int y){ if(x<0 || x>=n || y<0 || y>=m || visited[x][y]==1)return false; return true; } void bfs() { queue<pair<int, int> > kol; kol.push({0, 0}); while(!kol.empty()) { pair<int, int> v=kol.front(); int x=v.f, y=v.s; kol.pop(); visited[x][y]=true; if(czy(x-1, y)){ tab[x-1][y]={tab[x][y].f+1, tab[x][y].s}; visited[x-1][y]=true; kol.push({x-1, y}); } if(czy(x, y-1)){ tab[x][y-1]={tab[x][y].f+1, tab[x][y].s}; visited[x][y-1]=true; kol.push({x, y-1}); } if(czy(x+1, y)){ tab[x+1][y]={tab[x][y].f, tab[x][y].s+1}; visited[x+1][y]=true; kol.push({x+1, y}); } if(czy(x, y+1)){ tab[x][y+1]={tab[x][y].f, tab[x][y].s+1}; visited[x][y+1]=true; kol.push({x, y+1}); } } return; } int main(){ cin>>n>>m>>k; char c; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin>>c; if(c=='.')visited[i][j]=0; else visited[i][j]=1; } } bfs(); long long wyn=1e18; long long a, b; int ile=0; long long wej=(long long)tab[n-1][m-1].s; long long zej=(long long)tab[n-1][m-1].f; for(int i=0; i<k; i++){ cin>>a>>b; if(wej*a+zej*b<wyn){ wyn=wej*a+zej*b; ile=1; } else if(wej*a+zej*b==wyn)ile++; } cout<<wyn<<" "<<ile; return 0; } |