#include <bits/stdc++.h> using namespace std; typedef long long lld; typedef pair<int,int> pii; typedef pair<lld,lld> pll; typedef vector<int> vint; #define ff first #define ss second #define mp make_pair #define pb push_back int n,m,T,k,w1,w2; bitset<2048> t[2048]; lld mx=1ll<<60, a, b; int s[1<<20]; char c; queue <pair<int,pii> > q; pair<int,pii> x; void add(int d, int x, int y){ if(t[x][y]){ t[x][y]=0; q.push(mp(d+1,mp(x,y))); } } int main(){ scanf("%d%d%d",&n,&m,&T); for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ scanf(" %c",&c); if(c=='.') t[i][j]=1; } } add(-1,1,1); while(!q.empty()){ x=q.front(); q.pop(); if(x.ss==mp(n,m)){ w1=x.ff; break; } add(x.ff,x.ss.ff-1,x.ss.ss); add(x.ff,x.ss.ff+1,x.ss.ss); add(x.ff,x.ss.ff,x.ss.ss-1); add(x.ff,x.ss.ff,x.ss.ss+1); } w2=w1+2-n-m; w2>>=1; w1-=w2; for(int i=1;i<=T;++i){ scanf("%lld%lld",&a,&b); if(a*w1+b*w2==mx) ++k; if(a*w1+b*w2<mx){ k=1; mx=a*w1+b*w2; } } printf("%lld %d",mx,k); return 0; } /* 2 5 4 .X... ...X. 2 1 2 2 1 7 2 1 5 7 1 ......X X.X..X. ..X.X.X .X.X... .....X. 2 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 | #include <bits/stdc++.h> using namespace std; typedef long long lld; typedef pair<int,int> pii; typedef pair<lld,lld> pll; typedef vector<int> vint; #define ff first #define ss second #define mp make_pair #define pb push_back int n,m,T,k,w1,w2; bitset<2048> t[2048]; lld mx=1ll<<60, a, b; int s[1<<20]; char c; queue <pair<int,pii> > q; pair<int,pii> x; void add(int d, int x, int y){ if(t[x][y]){ t[x][y]=0; q.push(mp(d+1,mp(x,y))); } } int main(){ scanf("%d%d%d",&n,&m,&T); for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ scanf(" %c",&c); if(c=='.') t[i][j]=1; } } add(-1,1,1); while(!q.empty()){ x=q.front(); q.pop(); if(x.ss==mp(n,m)){ w1=x.ff; break; } add(x.ff,x.ss.ff-1,x.ss.ss); add(x.ff,x.ss.ff+1,x.ss.ss); add(x.ff,x.ss.ff,x.ss.ss-1); add(x.ff,x.ss.ff,x.ss.ss+1); } w2=w1+2-n-m; w2>>=1; w1-=w2; for(int i=1;i<=T;++i){ scanf("%lld%lld",&a,&b); if(a*w1+b*w2==mx) ++k; if(a*w1+b*w2<mx){ k=1; mx=a*w1+b*w2; } } printf("%lld %d",mx,k); return 0; } /* 2 5 4 .X... ...X. 2 1 2 2 1 7 2 1 5 7 1 ......X X.X..X. ..X.X.X .X.X... .....X. 2 1 */ |