#include<iostream> #include<utility> #include<queue> using namespace std; int main() { long long n,m,k; cin >> n >> m >> k; bool odw[n+2][m+2]; for(int i=0; i<n+2;i++) {odw[i][0] = false; odw[i][m+1] = false;} for(int i=0; i<m+2;i++) {odw[0][i] = false; odw[n+1][i] = false;} for(int i=1; i<n+1;i++) for(int j=1; j<m+1;j++) { char y; cin >> y; if(y=='.') odw[i][j]=true; else odw[i][j]=false; } typedef pair<long long,long long> para; typedef pair<para,long long> ppara; queue<ppara> q; long ans = 0; odw[1][1] = false; q.push(make_pair(make_pair(1,1),0)); while(q.size()>0) { ppara x = q.front(); q.pop(); long long xloc = x.first.first; long long yloc = x.first.second; long long valloc = x.second; odw[xloc][yloc] = false; if (xloc == n && yloc == m) { ans = valloc; break; } else { if(odw[xloc-1][yloc]) q.push(make_pair(make_pair(xloc-1,yloc),valloc+1)); if(odw[xloc+1][yloc]) q.push(make_pair(make_pair(xloc+1,yloc),valloc+1)); if(odw[xloc][yloc-1]) q.push(make_pair(make_pair(xloc,yloc-1),valloc+1)); if(odw[xloc][yloc+1]) q.push(make_pair(make_pair(xloc,yloc+1),valloc+1)); } } long long ile = 1; long long mini = 9000000000; long long b = (ans-(n+m-2))/2; long long a = ans - b; for(int i=0; i<k; i++) { long long c,d; cin >> c >> d; long long an = a*c+b*d; if(an<mini) { mini = an; ile = 1; } else if(an == mini) ile++; } cout << mini << " " << ile <<endl; 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 | #include<iostream> #include<utility> #include<queue> using namespace std; int main() { long long n,m,k; cin >> n >> m >> k; bool odw[n+2][m+2]; for(int i=0; i<n+2;i++) {odw[i][0] = false; odw[i][m+1] = false;} for(int i=0; i<m+2;i++) {odw[0][i] = false; odw[n+1][i] = false;} for(int i=1; i<n+1;i++) for(int j=1; j<m+1;j++) { char y; cin >> y; if(y=='.') odw[i][j]=true; else odw[i][j]=false; } typedef pair<long long,long long> para; typedef pair<para,long long> ppara; queue<ppara> q; long ans = 0; odw[1][1] = false; q.push(make_pair(make_pair(1,1),0)); while(q.size()>0) { ppara x = q.front(); q.pop(); long long xloc = x.first.first; long long yloc = x.first.second; long long valloc = x.second; odw[xloc][yloc] = false; if (xloc == n && yloc == m) { ans = valloc; break; } else { if(odw[xloc-1][yloc]) q.push(make_pair(make_pair(xloc-1,yloc),valloc+1)); if(odw[xloc+1][yloc]) q.push(make_pair(make_pair(xloc+1,yloc),valloc+1)); if(odw[xloc][yloc-1]) q.push(make_pair(make_pair(xloc,yloc-1),valloc+1)); if(odw[xloc][yloc+1]) q.push(make_pair(make_pair(xloc,yloc+1),valloc+1)); } } long long ile = 1; long long mini = 9000000000; long long b = (ans-(n+m-2))/2; long long a = ans - b; for(int i=0; i<k; i++) { long long c,d; cin >> c >> d; long long an = a*c+b*d; if(an<mini) { mini = an; ile = 1; } else if(an == mini) ile++; } cout << mini << " " << ile <<endl; return 0; } |