Eric_David_King 2024-02-04 18:10 采纳率: 20%
浏览 25
已结题

洛谷B3626评测失败,求指导

洛谷B3626。这是我写的源代码

// Problem: B3626 跳跃机器人
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/B3626
// Memory Limit: 128 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
bool bl(long long a,long long b,long long c)
{
    if((c-a)<=(b-c)) return true;
    else return false;
}
int main()
{
    long long n;
    cin>>n;
    long long sum;
    for(sum=0;n!=1;sum++)
    {
        long long p=ceil(sqrt(n*1.0)-1),q=floor(sqrt(n*1.0)+1);
        // cout<<p<<" "<<q<<endl;
        long long pp=p*p,qq=q*q;
        // cout<<pp<<" "<<qq<<endl;
        if(!(n%2)) n/=2;
        else if(sum==0) n--;
        else if(n==3) n--;
        else if(bl(pp,qq,n)) n--;
        else n++;
        // cout<<n<<endl<<endl;
    }
    cout<<sum<<endl;
    return 0;

}

但为什么只得了20分?

img

  • 写回答

3条回答 默认 最新

  • Y.F... 2024-03-03 18:21
    关注
    
    #include<bits/stdc++.h>
    using namespace std;
    
    signed main()
    {
        int n;
        cin>>n;
        vector<int>vis(n+1,-1);
        queue<int>s;
        s.push(1);
        vis[1]=0;
        while(!s.empty())
        {
            int cur=s.front();
            if(cur==n){cout<<vis[cur];return 0;}
            s.pop();
            int des[]={cur-1,cur+1,cur*2};
            for(int i=0;i<3;i++)
            {
                if(vis[des[i]]==-1&&des[i]>1&&des[i]<=n)
                {
                    vis[des[i]]=vis[cur]+1;
                    s.push(des[i]);
                }
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 创建了问题 2月4日