第十二个点有问题

我用自己的代码,在bzoj上能ac的代码,别人的代码,都是第十二个点WA了。数据绝对有问题。如果是我的错请指出,谢谢。
#include<bits/stdc++.h>
const int maxn=400001,inf=400000;
bool vis1[maxn],vis2[maxn];
int path1[2][maxn],path2[2][maxn],d1[2],d2[2];
void bfs(int step,int r)
{
while(d1[r])
{
int p=path1[r][d1[r]];
if(p+1<=inf&&!vis1[p+1])
{
path1[r^1][++d1[r^1]]=p+1;
vis1[p+1]=true;
if(vis2[p+1])
{
std::cout<<step;
exit(0);
}
}
if(p-1>=0&&!vis1[p-1])
{
path1[r^1][++d1[r^1]]=p-1;
vis1[p-1]=true;
if(vis2[p-1])
{
std::cout<<step;
exit(0);
}
}
if((p<<1)<=inf&&!vis1[p<<1])
{
path1[r^1][++d1[r^1]]=p<<1;
vis1[p<<1]=true;
if(vis2[p<<1])
{
std::cout<<step;
exit(0);
}
}
d1[r]--;
}
while(d2[r])
{
int p=path2[r][d2[r]];
if(p+1<=inf&&!vis2[p+1])
{
path2[r^1][++d2[r^1]]=p+1;
vis2[p+1]=true;
if(vis1[p+1])
{
std::cout<<step+1;
exit(0);
}
}
if(p-1>=0&&!vis2[p-1])
{
path2[r^1][++d2[r^1]]=p-1;
vis2[p-1]=true;
if(vis1[p-1])
{
std::cout<<step+1;
exit(0);
}
}
if((p>>1)<=inf&&!(p&1)&&!vis2[p>>1])
{
path2[r^1][++d2[r^1]]=p>>1;
vis2[p>>1]=true;
if(vis1[p>>1])
{
std::cout<<step+1;
exit(0);
}
}
d2[r]--;
}
bfs(step+2,r^1);
}
int main()
{
int n,k;
memset(vis1,false,sizeof(vis1));
memset(vis2,false,sizeof(vis2));
std::cin>>n>>k;
d1[0]=d1[1]=d2[0]=d2[1]=0;vis1[n]=true;vis2[k]=true;
path1[0][++d1[0]]=n;path2[0][++d2[0]]=k;
bfs(1,0);
return 0;
}

0 条评论

目前还没有评论...

信息

难度
6
分类
(无)
标签
递交数
60
已通过
17
通过率
28%
上传者