广搜 魔法数字

移动字母

https://ac.nowcoder.com/acm/contest/6218/A

看题 想到搜索 写了一下深搜爆栈 害 虽然不愿意 但是还是得写广搜了(广搜写的少 不太熟练emmm)
开两个数组 一个存经过得运算结果 一个存最终某个结果的步数
然后判断条件 剪枝一下
cz为当前所处状态的话
后退时候
存步数a[cz - 1]= a[cz] + 1;
记录结果
b[hzz] = cz - 1;
hzz++;
前进时候
存步数a[cz + 1] = a[cz] + 1;
记录结果
b[hzz] = cz + 1;
hzz++;
翻倍时候
存步数a[cz * cz] = a[cz] + 1;
记录结果
b[hzz] = cz*cz;
hzz++;

class Solution {
public:
int a[110000],b[1100000];
int solve(int n, int m) {
    b[0] = n;
    if (n == m)return 0;

    int qzz=0, hzz=1;
    memset(a, -1, sizeof(a));
    a[n] = 0;
    while (qzz<hzz)
    {
        int cz = b[qzz];
        qzz++;
        if (cz > 1 && -1 == a[cz - 1])
        {
            a[cz - 1]= a[cz] + 1;
            b[hzz] = cz - 1;
            hzz++;
        }
        if (cz +1<=100000 && -1 == a[cz + 1])
        {
            a[cz + 1] = a[cz] + 1;
            b[hzz] = cz + 1;
            hzz++;
        }
        if (1ll*cz*cz <=100000 && -1 == a[cz *cz])
        {
            a[cz * cz] = a[cz] + 1;
            b[hzz] = cz *cz ;
            hzz++;
        }

    }
    return a[m];

}

};
全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
qz鹿:*** 祝他毕业就失业
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务