#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; long long INF=0x3f3f3f3f3f3f3f; long long gcd(long long a,long long b) { if(b==0)return a; else return gcd(b,a%b); } long long exgcd(long long a, long long b, long long &x, long long &y) { if (!b) {x = 1; y = 0; return a;} long long d = exgcd(b, a % b, y, x); y -= a / b * x; return d; } int fangcheng(long long a,long long b,long long c,long long &x,long long &y) { long long d=exgcd(a,b,x,y); if(c%d) return -1; int k=c/d; x*=k; y*=k; long long t=b/d; if(t<0)t=-t; x=(x%t+t)%t; y=(c-(x*a))/b; return 1; } int main() { int i,j,k; long long n,m; long long xx,yy,x,y; scanf("%lld%lld%d",&n,&m,&k); while(k--) { scanf("%lld%lld",&x,&y); long long ans=INF; int flag=fangcheng(2*n,-2*m,x+y,xx,yy); if(flag==1 && 2*n*xx-x>=0)ans=min(ans,2*n*xx-x); flag=fangcheng(2*n,-2*m,-x+y,xx,yy); if(flag==1 && 2*n*xx+x>=0)ans=min(ans,2*n*xx+x); flag=fangcheng(2*n,-2*m,x-y,xx,yy); if(flag==1 && 2*n*xx-x>=0)ans=min(ans,2*n*xx-x); flag=fangcheng(2*n,-2*m,-x-y,xx,yy); if(flag==1 && 2*n*xx+x>=0)ans=min(ans,2*n*xx+x); if(ans>m*n)printf("-1\n"); else printf("%lld\n",ans); } return 0; }
|