#include<bits/stdc++.h> #define fi first #define se second using namespace std; const long long INF=1e18+7; bool ok[2010][2010]; pair<int,int> d[2010][2010]; vector<pair<int,int>> dd={{0,1},{0,-1},{1,0},{-1,0}}; pair<int,int> ch[3][3]; queue<pair<int,int>> que; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ch[1][2]={1,0}; ch[1][0]={0,1}; ch[2][1]={1,0}; ch[0][1]={0,1}; int n,m,k,i,j; cin>>n>>m>>k; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { char c; cin>>c; ok[i][j]=(c=='.'); } } que.push({1,1}); ok[1][1]=false; while(!que.empty()) { auto v=que.front(); que.pop(); for(auto xd:dd) { if(ok[v.fi+xd.fi][v.se+xd.se]) { ok[v.fi+xd.fi][v.se+xd.se]=false; d[v.fi+xd.fi][v.se+xd.se]={d[v.fi][v.se].fi+ch[xd.fi+1][xd.se+1].fi,d[v.fi][v.se].se+ch[xd.fi+1][xd.se+1].se}; que.push({v.fi+xd.fi,v.se+xd.se}); } } } long long ans=INF; int cnt=0; while(k--) { long long a,b; cin>>a>>b; long long c=a*d[n][m].fi+b*d[n][m].se; if(c<ans) { ans=c; cnt=0; } if(c==ans) cnt++; } cout<<ans<<" "<<cnt<<"\n"; 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 | #include<bits/stdc++.h> #define fi first #define se second using namespace std; const long long INF=1e18+7; bool ok[2010][2010]; pair<int,int> d[2010][2010]; vector<pair<int,int>> dd={{0,1},{0,-1},{1,0},{-1,0}}; pair<int,int> ch[3][3]; queue<pair<int,int>> que; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ch[1][2]={1,0}; ch[1][0]={0,1}; ch[2][1]={1,0}; ch[0][1]={0,1}; int n,m,k,i,j; cin>>n>>m>>k; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { char c; cin>>c; ok[i][j]=(c=='.'); } } que.push({1,1}); ok[1][1]=false; while(!que.empty()) { auto v=que.front(); que.pop(); for(auto xd:dd) { if(ok[v.fi+xd.fi][v.se+xd.se]) { ok[v.fi+xd.fi][v.se+xd.se]=false; d[v.fi+xd.fi][v.se+xd.se]={d[v.fi][v.se].fi+ch[xd.fi+1][xd.se+1].fi,d[v.fi][v.se].se+ch[xd.fi+1][xd.se+1].se}; que.push({v.fi+xd.fi,v.se+xd.se}); } } } long long ans=INF; int cnt=0; while(k--) { long long a,b; cin>>a>>b; long long c=a*d[n][m].fi+b*d[n][m].se; if(c<ans) { ans=c; cnt=0; } if(c==ans) cnt++; } cout<<ans<<" "<<cnt<<"\n"; return 0; } |