over_caykl @ 2023-01-26 02:24:02
第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还是什么,导致评测出现错误,从而使结果与本地结果不一样。求帮。
by Acoipp @ 2023-01-26 08:17:58
洛谷评测机是 Linux 版本的,换行符以 \r
结尾,并不是 Windows 中的以 \r
和 \n
结尾。
可以去 洛谷在线IDE 测试一下。
by Acoipp @ 2023-01-26 08:18:42
而 getline 函数是读取到 \n
结束,有可能会读到一些不存在的字符。
by Eznibuil @ 2023-01-26 09:46:56
@dlsk_po 婷婷,Linux 是 \n
结尾,不要误人子弟
by Acoipp @ 2023-01-26 13:14:14
@Eznibuil 哦,对对,抱歉