#include<iostream> using namespace std; int tab[2004][2004]; int w[2]; int main() { std::ios_base::sync_with_stdio(0); cin.tie(0); int n,m; cin >> n >> m; int ile; cin >> ile; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { char x; cin >> x; if(x=='.') { tab[i][j]=1; } if(x=='X') { tab[i][j]=0; } } } tab[1][1]=2; while(1) { for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(tab[i][j]>1) { if(tab[i+1][j]!=0) { if(tab[i+1][j]==1) { tab[i+1][j]=tab[i][j]; } else if(tab[i+1][j]>tab[i][j]) { tab[i+1][j]=tab[i][j]; } } if(tab[i-1][j]!=0) { if(tab[i-1][j]==1) { tab[i-1][j]=tab[i][j]+1; } else if(tab[i-1][j]>tab[i][j]+1) { tab[i-1][j]=tab[i][j]+1; } } if(tab[i][j-1]!=0) { if(tab[i][j-1]==1) { tab[i][j-1]=tab[i][j]+1; } else if(tab[i][j-1]>tab[i][j]+1) { tab[i][j-1]=tab[i][j]+1; } } if(tab[i][j+1]!=0) { if(tab[i][j+1]==1) { tab[i][j+1]=tab[i][j]; } else if(tab[i][j+1]>tab[i][j]) { tab[i][j+1]=tab[i][j]; } } } } } if(tab[n][m]>1) { break; } } w[0]=10000005; for(int i=0; i<ile; i++) { int a,b; cin >> a >> b; if(a*(n-1+m-1) + a*(tab[n][m]-2) + b*(tab[n][m]-2) == w[0]) { w[1]++; } if(a*(n-1+m-1) + a*(tab[n][m]-2) + b*(tab[n][m]-2) < w[0]) { w[0]=a*(n-1+m-1) + a*(tab[n][m]-2) + b*(tab[n][m]-2); w[1]=1; } } cout << w[0] << ' ' << w[1]; }
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 114 115 116 | #include<iostream> using namespace std; int tab[2004][2004]; int w[2]; int main() { std::ios_base::sync_with_stdio(0); cin.tie(0); int n,m; cin >> n >> m; int ile; cin >> ile; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { char x; cin >> x; if(x=='.') { tab[i][j]=1; } if(x=='X') { tab[i][j]=0; } } } tab[1][1]=2; while(1) { for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(tab[i][j]>1) { if(tab[i+1][j]!=0) { if(tab[i+1][j]==1) { tab[i+1][j]=tab[i][j]; } else if(tab[i+1][j]>tab[i][j]) { tab[i+1][j]=tab[i][j]; } } if(tab[i-1][j]!=0) { if(tab[i-1][j]==1) { tab[i-1][j]=tab[i][j]+1; } else if(tab[i-1][j]>tab[i][j]+1) { tab[i-1][j]=tab[i][j]+1; } } if(tab[i][j-1]!=0) { if(tab[i][j-1]==1) { tab[i][j-1]=tab[i][j]+1; } else if(tab[i][j-1]>tab[i][j]+1) { tab[i][j-1]=tab[i][j]+1; } } if(tab[i][j+1]!=0) { if(tab[i][j+1]==1) { tab[i][j+1]=tab[i][j]; } else if(tab[i][j+1]>tab[i][j]) { tab[i][j+1]=tab[i][j]; } } } } } if(tab[n][m]>1) { break; } } w[0]=10000005; for(int i=0; i<ile; i++) { int a,b; cin >> a >> b; if(a*(n-1+m-1) + a*(tab[n][m]-2) + b*(tab[n][m]-2) == w[0]) { w[1]++; } if(a*(n-1+m-1) + a*(tab[n][m]-2) + b*(tab[n][m]-2) < w[0]) { w[0]=a*(n-1+m-1) + a*(tab[n][m]-2) + b*(tab[n][m]-2); w[1]=1; } } cout << w[0] << ' ' << w[1]; } |