美文网首页
CUIT-ACM 2017-01-14 新生训练赛I题菜鸟见解

CUIT-ACM 2017-01-14 新生训练赛I题菜鸟见解

作者: Anxdada | 来源:发表于2017-01-15 21:13 被阅读0次

    题意给两个数a,b,叫你求是否存在这样x,y两个数使得满足x+y=a,LCM(x,y)=b;然后就简单了,解两个方程就是了。坑面在于尽量用long long(不过好像这道题用int 也能过),还有就是开△(delta)=b^2-4ac根号时,要保证开出来是个整数(因为会自动取整)就要用到一些小技巧,具体请看代码,如果不能保证是整数则会WA的。(我就是没想到这点,找了好久).

    #include<cstdio>
    #include<cmath>
    
    int gcd(int x,int y){
        return y==0?x:gcd(y,x%y);
    }
    
    int main()
    {   long long a,b,x,y,s;
        while(scanf("%lld %lld",&a,&b)!=EOF){
            b*=gcd(a,b);
            s=sqrt(a*a-4*b);
            y=(a+s)/2;
            x=a-y;
            if(s>=0 && s*s==a*a-4*b )//最大的坑点就是要看判别式△(delta)=b^2-4ac是否看出来还是整数,如果不是整数就不行,因为它会自动取整.
                printf("%lld %lld\n",x,y);//怎样判断的方法就是s*s==a*a-4*b.
            else
                printf("No Solution\n");
        }
    }
    

    相关文章

      网友评论

          本文标题:CUIT-ACM 2017-01-14 新生训练赛I题菜鸟见解

          本文链接:https://www.haomeiwen.com/subject/vakubttx.html