- Catch That Cow 抓住那只牛
- @ 2017-10-14 19:19:16
我用自己的代码,在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%
- 上传者