#include<bits/stdc++.h>
using namespace std;
struct pos{
int x,y,c;
};
bool visited[2000+5][2000+5];
char s[2000+5];
queue <pos> q;
int main(){
int n,m,k,i,j,a,b,t,answer;
long long result,pom;
pos p;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++){
scanf("%s",s);
for(j=0;j<m;j++)
visited[j][i]=(s[j]=='X');
}
q.push({0,0,0});
while(!q.empty()){
p=q.front();
q.pop();
if(visited[p.x][p.y])
continue;
visited[p.x][p.y]=true;
if(p.x==m-1 && p.y==n-1){
t=p.c;
break;
}
if(p.x<m-1)
if(!visited[p.x+1][p.y])
q.push({p.x+1,p.y,p.c+1});
if(p.y<n-1)
if(!visited[p.x][p.y+1])
q.push({p.x,p.y+1,p.c+1});
if(p.x>0)
if(!visited[p.x-1][p.y])
q.push({p.x-1,p.y,p.c+1});
if(p.y>0)
if(!visited[p.x][p.y-1])
q.push({p.x,p.y-1,p.c+1});
}
answer=0;
result=1000000000000000000+69;
for(i=0;i<k;i++){
scanf("%d%d",&a,&b);
pom=(long long)(m-1+n-1+(t-m+1-n+1)/2)*a+(long long)(t-m+1-n+1)/2*b;
if(result==pom)
answer++;
if(result>pom){
result=pom;
answer=1;
}
}
printf("%lld %d\n",result,answer);
}
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 | #include<bits/stdc++.h> using namespace std; struct pos{ int x,y,c; }; bool visited[2000+5][2000+5]; char s[2000+5]; queue <pos> q; int main(){ int n,m,k,i,j,a,b,t,answer; long long result,pom; pos p; scanf("%d%d%d",&n,&m,&k); for(i=0;i<n;i++){ scanf("%s",s); for(j=0;j<m;j++) visited[j][i]=(s[j]=='X'); } q.push({0,0,0}); while(!q.empty()){ p=q.front(); q.pop(); if(visited[p.x][p.y]) continue; visited[p.x][p.y]=true; if(p.x==m-1 && p.y==n-1){ t=p.c; break; } if(p.x<m-1) if(!visited[p.x+1][p.y]) q.push({p.x+1,p.y,p.c+1}); if(p.y<n-1) if(!visited[p.x][p.y+1]) q.push({p.x,p.y+1,p.c+1}); if(p.x>0) if(!visited[p.x-1][p.y]) q.push({p.x-1,p.y,p.c+1}); if(p.y>0) if(!visited[p.x][p.y-1]) q.push({p.x,p.y-1,p.c+1}); } answer=0; result=1000000000000000000+69; for(i=0;i<k;i++){ scanf("%d%d",&a,&b); pom=(long long)(m-1+n-1+(t-m+1-n+1)/2)*a+(long long)(t-m+1-n+1)/2*b; if(result==pom) answer++; if(result>pom){ result=pom; answer=1; } } printf("%lld %d\n",result,answer); } |
English