标签: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