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;
}