K题只过了90%,求大佬帮找错误

赛中提交了两三次,答案错误,把很多情况考虑了,但是还没过,赛后看了下只有90%多通过,好像特判少考虑了?

求大佬能看到后解答下,C++小白求教了QWQ

#include <bits/stdc++.h>
using namespace std;
#define int long long
 
void kk(){
    cout<<-1<<endl;
    return ;
}
 
signed main(){
    int sx,sy,tx,ty;
    cin>>sx>>sy>>tx>>ty;
    if(tx<sx||ty<sy){kk();return 0;}
     
    if(sx==tx&&sy==ty){
        cout<<0<<endl;
        return 0;
    }
     
    int x=tx,y=ty;
    int cnt=0;
     
    while(1){
        if(x==sx&&y==sy){
            cout<<cnt<<endl;
            return 0;
        }
        if(x<sx||y<sy){
            kk();return 0;
        }
         
        if(x>y){
            if(y<sy){kk();return 0;}
             
            if(y!=0&&x>2*y){
                int steps=(x-max(sx,y))/y;
                if(steps<=0)steps=1;
                x-=steps*y;
                cnt+=steps;
            }
            else{x-=y;cnt++;}
        }        
        else if(y>x){
            if(x<sx){kk();return 0;}
             
            if(x!=0&&y>2*x){
                int steps=(y-max(sy,x))/x;
                if(steps<=0)steps=1;
                y-=steps*x;
                cnt+=steps;
            }
            else{y-=x;cnt++;}
        }
        else{kk();return 0;}
    }
 
    return 0;
}

全部评论
看着好乱,这是我的 int sx,sy,tx,ty; struct node{ int x; int y; int cnt; }; void solve(){ cin>>sx>>sy>>tx>>ty; if(tx<sx||ty<sy){ cout<<-1<<endl; return; } queue<node>ans; ans.push({sx,sy,0}); while(!ans.empty()){ node a=ans.front(); ans.pop(); int xx=a.x; int yy=a.y; int cntt=a.cnt; if(xx==tx&&yy==ty){ cout<<cntt<<endl; return; } int m=max(xx,yy); if(xx+m<=tx) ans.push({xx+m,yy,cntt+1}); if(yy+m<=ty) ans.push({xx,yy+m,cntt+1}); } cout<<-1<<endl; }
1 回复 分享
发布于 2025-08-13 20:39 湖北

相关推荐

2025-12-28 22:19
门头沟学院 Java
不敢追165女神:简历写得毫无特点,你说你要是大二或者大三找寒假实习到暑期实习这段时间,你的简历还能约到面试。但是你是研究生哥,面试官不会因为你是研究生而降低要求,反而会觉得你是研究生才学了这么一点?为什么我不找个同阶段的本科生?
简历中的项目经历要怎么写
点赞 评论 收藏
分享
烤点老白薯:感觉这女生 有上位者的甲方心态 不适合处对象 也不清楚自己的竞争力 整得他有多懂似的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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