码迷,mamicode.com
首页 > 其他好文 > 详细

未完成

时间:2017-08-08 22:54:45      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:etc   void   typedef   class   return   char   ret   git   exgcd   

#include <ctype.h>
#include <cstdio>
typedef long long LL;

void read(LL &x)
{
    x=0;bool f=0;
    register char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch==-) f=1;
    for(; isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+ch-0;
    x=f?(~x)+1:x;
}
LL exgcd(LL a,LL b,LL &x,LL &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    LL ans=exgcd(b,a%b,x,y);
    LL tmp=x;
    x=y;
    y=tmp-a/b*y;
    return ans;
    
}
LL max(LL a,LL b) {return a>b?a:b;}
LL min(LL a,LL b) {return a>b?b:a;}
LL a,b,c,ans,Max,Min=0x7fffffff;
bool solve(LL a,LL b,LL c)
{
    LL x1,y1;
    LL gcd=exgcd(a,b,x1,y1);
    if(c%gcd) return false;
    LL x0=x1*c/gcd,y0=y1*c/gcd,kx=b/gcd,ky=-a/gcd;
    int i=0;
    LL v=c-x0;
    if(v==y0)
    {
        ans++;
        v==0?Max=max(Max,2):Max=max(Max,1);
        v==0?Min=min(Min,2):Min=min(Min,1);
    }
    for(i=1;x0+kx*i<=c;i++) 
    {
        LL v=c-(x0+kx*i);
        if((v-y0)%i==0&&(v-y0)/i==ky)
        {
            ans++;
            Max=max(Max,x0+kx*i+y0+ky*i);
            Min=min(Min,x0+kx*i+y0+ky*i);
        }
    }
    return true;
}
int main()
{
    read(a);
    read(b);
    read(c);
    if(!(solve(a,b,c))) printf("-1 -1\n0");
    else printf("%d %d\n%d",Min,Max,ans);
}

 

未完成

标签:etc   void   typedef   class   return   char   ret   git   exgcd   

原文地址:http://www.cnblogs.com/ruojisun/p/7309257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!