#include <bits/stdc++.h>
using namespace std;
int n,m,k,par[4200007];
long long a,b,x,y,wyn;
char c[2007][2007];
vector <int> graf[4200007];
vector <long long> wyniki;
queue <int> q;
bitset <4200007> odw;
void odzyskaj()
{
int x = 2007*n+m;
while(x!=2008)
{
if(par[x]==x-2007 || par[x]==x-1) a++;
else b++;
x=par[x];
}
}
void bfs(int v)
{
q.push(v);
while(!q.empty())
{
v = q.front();
q.pop();
//cout << v << endl;
if(v==2007*n+m)
{
odzyskaj();
return;
}
for(int i=0; i<graf[v].size(); i++)
{
int w = graf[v][i];
if(!odw[w])
{
odw[w]=true;
par[w]=v;
q.push(w);
}
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m >> k;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin >> c[i][j];
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
int w = i*2007+j;
if(c[i][j]=='.')
{
if(c[i-1][j]=='.') graf[w].push_back(w-2007);
if(c[i+1][j]=='.') graf[w].push_back(w+2007);
if(c[i][j-1]=='.') graf[w].push_back(w-1);
if(c[i][j+1]=='.') graf[w].push_back(w+1);
}
}
}
bfs(2008);
for(int i=0; i<k; i++)
{
cin >> x >> y;
wyniki.push_back(x*a+y*b);
}
sort(wyniki.begin(),wyniki.end());
wyn=wyniki[0];
long long cntr=1;
while(wyniki[cntr]==wyn && cntr<wyniki.size()) cntr++;
cout << wyn << ' ' << cntr << 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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #include <bits/stdc++.h> using namespace std; int n,m,k,par[4200007]; long long a,b,x,y,wyn; char c[2007][2007]; vector <int> graf[4200007]; vector <long long> wyniki; queue <int> q; bitset <4200007> odw; void odzyskaj() { int x = 2007*n+m; while(x!=2008) { if(par[x]==x-2007 || par[x]==x-1) a++; else b++; x=par[x]; } } void bfs(int v) { q.push(v); while(!q.empty()) { v = q.front(); q.pop(); //cout << v << endl; if(v==2007*n+m) { odzyskaj(); return; } for(int i=0; i<graf[v].size(); i++) { int w = graf[v][i]; if(!odw[w]) { odw[w]=true; par[w]=v; q.push(w); } } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> k; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cin >> c[i][j]; } } for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { int w = i*2007+j; if(c[i][j]=='.') { if(c[i-1][j]=='.') graf[w].push_back(w-2007); if(c[i+1][j]=='.') graf[w].push_back(w+2007); if(c[i][j-1]=='.') graf[w].push_back(w-1); if(c[i][j+1]=='.') graf[w].push_back(w+1); } } } bfs(2008); for(int i=0; i<k; i++) { cin >> x >> y; wyniki.push_back(x*a+y*b); } sort(wyniki.begin(),wyniki.end()); wyn=wyniki[0]; long long cntr=1; while(wyniki[cntr]==wyn && cntr<wyniki.size()) cntr++; cout << wyn << ' ' << cntr << endl; } |
English