玄学O2
查看原帖
玄学O2
1124323
A_small_WA楼主2024/8/25 21:45

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。

求大佬解答这种现象

2024/8/25 21:45
加载中...