rt, 以下这份代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,mp[2145][2145];
bool vis[2145][2145];
struct node{
long long x,y,up,dn;
};
int dx[5]={1,0,0,-1};
int dy[5]={0,1,-1,0};
queue <node> q;
long long ans1,ans2;
int bfs(){
node now,nxt;
while(q.size()){
now=q.front();
q.pop();
int xxx=now.x,yyy=now.y;
if(xxx==n&&yyy==m){
ans1=min(ans1,now.up),ans2=min(ans2,now.dn);
continue;
}
if(vis[xxx][yyy]||mp[xxx][yyy]==-1) continue;
if(xxx>=1&&yyy>=1&&xxx<=n&&yyy<=m){
vis[xxx][yyy]=1;
for(int i=0;i<4;i++){
nxt.x=now.x+dx[i],nxt.y=now.y+dy[i];
if(i<2) nxt.up=now.up+1;
else nxt.up=now.up;
if(i>=2) nxt.dn=now.dn+1;
else nxt.dn=now.dn;
q.push(nxt);
}
}
}
}
int main(){
long long xx,yy,k,a,b,ans3,cnt=1;
ans1=ans2=ans3=1e18;
cin>>n>>m>>k;
char c;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c;
if(c=='X') mp[i][j]=-1;
}
}
node stt;
stt.up=0,stt.x=1,stt.y=1,stt.dn=0;
q.push(stt);
bfs();
for(int i=1;i<=k;i++){
cin>>a>>b;
long long k=a*ans1+b*ans2;
if(k<ans3) ans3=k,cnt=1;
else if(k==ans3) cnt++;
}
cout<<ans3<<" "<<cnt;
return 0;
}
在开启 O2 时测试点全部 RE,不开 O2 就直接 AC。
求大佬解答这种现象