#include<bits/stdc++.h> using namespace std; int odw[2006][2006], tab[2006][2006]; long long a[2006][2006], b[2006][2006]; struct wsp{ int a, b; }; int ka, kb; queue <wsp> q; void bfs(int x, int y) { wsp u; u.a=x; u.b=y; odw[x][y]=1; q.push(u); while(!q.empty()) { wsp u=q.front(); q.pop(); x=u.a; y=u.b; if(odw[x-1][y]==0&&tab[x-1][y]==0) { odw[x-1][y]=1; a[x-1][y]=1+a[x][y]; b[x-1][y]=b[x][y]; wsp pom; pom.a=x-1; pom.b=y; q.push(pom); } if(odw[x][y-1]==0&&tab[x][y-1]==0) { odw[x][y-1]=1; a[x][y-1]=1+a[x][y]; b[x][y-1]=b[x][y]; wsp pom; pom.a=x; pom.b=y-1; q.push(pom); } if(odw[x+1][y]==0&&tab[x+1][y]==0) { odw[x+1][y]=1; a[x+1][y]=a[x][y]; b[x+1][y]=1+b[x][y]; wsp pom; pom.a=x+1; pom.b=y; q.push(pom); } if(odw[x][y+1]==0&&tab[x][y+1]==0) { odw[x][y+1]=1; a[x][y+1]=a[x][y]; b[x][y+1]=1+b[x][y]; wsp pom; pom.a=x; pom.b=y+1; q.push(pom); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, q; cin>>n>>m>>q; for(int i=1;i<=n;i++) for(int j=1; j<=m; j++) { char c; cin>>c; if(c=='X') tab[i][j]=1; } for(int i=0;i<=n+1;i++) { for(int j=0;j<=m+1; j++) { if(i==0||i==n+1) tab[i][j]=1; if(j==0||j==m+1) tab[i][j]=1; // printf("%d", tab[i][j]); } // printf("\n"); } bfs(1,1); long long y1=a[n][m], x1=b[n][m]; // printf("%lld %lld", y1, x1); long long maks=100000000000000000; int coun=0; for(int i=1; i<=q; i++) { long long aa, bb; cin>>aa>>bb; long long koszt=aa*x1+bb*y1; if(koszt<maks) { maks=koszt; coun=1; } else if(koszt==maks) coun++; } cout<<maks<<" "<<coun; 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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #include<bits/stdc++.h> using namespace std; int odw[2006][2006], tab[2006][2006]; long long a[2006][2006], b[2006][2006]; struct wsp{ int a, b; }; int ka, kb; queue <wsp> q; void bfs(int x, int y) { wsp u; u.a=x; u.b=y; odw[x][y]=1; q.push(u); while(!q.empty()) { wsp u=q.front(); q.pop(); x=u.a; y=u.b; if(odw[x-1][y]==0&&tab[x-1][y]==0) { odw[x-1][y]=1; a[x-1][y]=1+a[x][y]; b[x-1][y]=b[x][y]; wsp pom; pom.a=x-1; pom.b=y; q.push(pom); } if(odw[x][y-1]==0&&tab[x][y-1]==0) { odw[x][y-1]=1; a[x][y-1]=1+a[x][y]; b[x][y-1]=b[x][y]; wsp pom; pom.a=x; pom.b=y-1; q.push(pom); } if(odw[x+1][y]==0&&tab[x+1][y]==0) { odw[x+1][y]=1; a[x+1][y]=a[x][y]; b[x+1][y]=1+b[x][y]; wsp pom; pom.a=x+1; pom.b=y; q.push(pom); } if(odw[x][y+1]==0&&tab[x][y+1]==0) { odw[x][y+1]=1; a[x][y+1]=a[x][y]; b[x][y+1]=1+b[x][y]; wsp pom; pom.a=x; pom.b=y+1; q.push(pom); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, q; cin>>n>>m>>q; for(int i=1;i<=n;i++) for(int j=1; j<=m; j++) { char c; cin>>c; if(c=='X') tab[i][j]=1; } for(int i=0;i<=n+1;i++) { for(int j=0;j<=m+1; j++) { if(i==0||i==n+1) tab[i][j]=1; if(j==0||j==m+1) tab[i][j]=1; // printf("%d", tab[i][j]); } // printf("\n"); } bfs(1,1); long long y1=a[n][m], x1=b[n][m]; // printf("%lld %lld", y1, x1); long long maks=100000000000000000; int coun=0; for(int i=1; i<=q; i++) { long long aa, bb; cin>>aa>>bb; long long koszt=aa*x1+bb*y1; if(koszt<maks) { maks=koszt; coun=1; } else if(koszt==maks) coun++; } cout<<maks<<" "<<coun; return 0; } |