奇怪的getline以及洛谷评测机
查看原帖
奇怪的getline以及洛谷评测机
271803
over_caykl楼主2023/1/26 02:24

第8个测试点我已经下载了,以下代码是可以通过样例和第八个测试点的(本地)。然而提交全Wa。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e2+5;

int n; 
char a[N*2][N*2];
int x,y,tx,ty;
int d[6][6]=
{{0,0},
{1,0},  
{-1,0},
{0,-2},
{0,2}};

bool check(int xx,int yy){
	if(xx<1||xx>n||yy<0||yy>=2*n-1) return 1;
	return 0;
}

int ans=1e9;
bool bk[N*2][N*2],qwq;

void dfs(int nx,int ny,int lst,int res){
	if(res>=ans) return;
	if(nx==tx&&ny==ty){
		ans=min(ans,res);
		qwq=1;
		return;
	}
	for(int i=1;i<=4;i++){
		int px=nx+d[i][0],py=ny+d[i][1];
		if(check(px,py)) continue;
		if(!bk[px][py]){
			bk[px][py]=1;
			int f=0;
			if(i!=lst) f=1;if(lst==-1) f=0;
			dfs(px,py,i,res+f);
			bk[px][py]=0;
		}
	}
}

int main(){
	cin>>n; getchar();
	for(int i=1;i<=n;i++)
		cin.getline(a[i],2*n+1);
	int len=n*2-1;
	for(int i=1;i<=n;i++)
		for(int j=0;j<len;j++){
			if(a[i][j]=='A') x=i,y=j,bk[i][j]=1;
			else if(a[i][j]=='B') tx=i,ty=j;
			else if(a[i][j]=='x') bk[i][j]=1;
		}
	dfs(x,y,-1,0ll);
	if(qwq) cout<<ans;
	else cout<<"-1";
	return 0;
}

改大了getline的第二个参数(比如写成10000等),只Wa掉了第8个点,但是本地测试是正确的。

不是很懂,我的代码是有ub还是什么,导致评测出现错误,从而使结果与本地结果不一样。求帮。

2023/1/26 02:24
加载中...