给出a,b,c,x1,x2,y1,y2,求满足ax+by+c=0,且x∈[x1,x2],y∈[y1,y2]的整数解有多少对?
标签:空格 line lld 数学题 math .com bzoj pre print
laj现在要沦为抄标程选手了 _(:зゝ∠)_ 明明这题如此简单的 _(:зゝ∠)_
1 #include "bits/stdc++.h" 2 using namespace std; 3 typedef long long LL; 4 int exgcd(int a,int b,LL &x,LL &y){ 5 if (b==0) return x=1,y=0,a; 6 int d=exgcd(b,a%b,x,y); 7 LL t=x;x=y,y=t-a/b*y; 8 return d; 9 } 10 int main(){ 11 freopen ("math.in","r",stdin);freopen ("math.out","w",stdout); 12 int i,j; 13 int a,b,c,d,e,f,g; 14 scanf("%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g);c=-c; 15 if (a==0 && b==0){ 16 if (c==0) printf("%lld",(LL)(e-d+1)*(g-f+1)); 17 else puts("0"); return 0; 18 } 19 if (a==0){ 20 if (c%b) return puts("0"),0; 21 if (c/b>=f && c/b<=g) return printf("%d",e-d+1),0; 22 return puts("0"),0; 23 } 24 if (b==0){ 25 if (c%a) return puts("0"),0; 26 if (c/a>=d && c/a<=e) return printf("%d",g-f+1),0; 27 return puts("0"),0; 28 } 29 LL x0,y0;int gcd=exgcd(a,b,x0,y0);if(c%gcd) return puts("0"),0; 30 x0=x0*c/gcd;y0=y0*c/gcd;int dx=b/gcd,dy=-a/gcd;int xt1,xt2,yt1,yt2; 31 if(dx>0) xt1=ceil((d-x0)*1.0/dx*1.0),xt2=floor((e-x0)*1.0/dx*1.0); 32 if(dx<0) xt1=ceil((e-x0)*1.0/dx*1.0),xt2=floor((d-x0)*1.0/dx*1.0); 33 if(dy>0) yt1=ceil((f-y0)*1.0/dy*1.0),yt2=floor((g-y0)*1.0/dy*1.0); 34 if(dy<0) yt1=ceil((g-y0)*1.0/dy*1.0),yt2=floor((f-y0)*1.0/dy*1.0); 35 printf("%d",max(0,min(xt2,yt2)-max(xt1,yt1)+1)); 36 return 0; 37 }
标签:空格 line lld 数学题 math .com bzoj pre print
原文地址:http://www.cnblogs.com/keximeiruguo/p/7779216.html