#金蛇狂舞

金蛇狂舞

https://ac.nowcoder.com/acm/contest/11219/D

D:金蛇狂舞

这题我被坑了呜呜呜无语了,看到题面,很明显的dfs爆搜或者打表过,因为x,y只有1到7。step也直到7 但是!!!有一个sqrt+取整算1步!!!我以为算两步呢,导致我交了6次没过最后排名只有惨淡200名。。最后一题我也调崩了

思路:dfs爆搜枚举每一种情况即可

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int t;
int ans = 10;
bool flag;
ll jc[25];
void dfs(ll x,int y,int step)
{
    if(step>7)
        return;
    if(x==y)
    {
        flag = true;
        ans = min(step,ans);
        return;
    }
    dfs(ceil(sqrt(x)),y,step+1);;
    dfs(floor(sqrt(x)),y,step+1);
    if(x<=13)
        dfs(jc[x],y,step+1);
}
int main()
{
    cin>>t;
    ll sum = 1;
    for(int i = 1;i<=13;++i)
    {
        sum*=i;
        jc[i] = sum;
    }
    while(t--)
    {
        flag = false;
        ans = 10;
        int x,y;
        cin>>x>>y;
        if(x==y){
            cout<<0<<endl;
            continue;
        }
        dfs(x,y,0);
        if(!flag)    cout<<-1<<endl;
        else cout<<ans<<endl;
    }
    return 0;
}
全部评论
请问为什么要在x<=13的时候才能阶乘呢?我也是dfs的思路,但是一直都不太会写dfs
点赞 回复 分享
发布于 2021-12-19 13:29
我想问一下,已经走过的点不用标记一下走过吗,这样下次就不走了,如果回溯了的话是会把这个点重新标为没走过
点赞 回复 分享
发布于 2021-12-17 21:18

相关推荐

在开会的单身狗很有一套:学院本被想着这么快有面试,而且简历废话太多了 那些在校经历什么荣誉什么的企业不关心
点赞 评论 收藏
分享
鼠鼠没有找到暑期实习,简历太空了,感觉直接去秋招会完蛋,这个时间点找个日常实习混个简历,边实习边准备秋招有没有搞头啊
梦想是成为七海千秋:可以的完全可以的,找不到暑期就找日常,秋招之前还是有很多时间可以实习的,哪怕只实习了一个月都可以写在简历上
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务