传送门

首先如果 $c$,$d$ 的和为奇数则无解,因为三个操作必定使 $a$,$b$ 的和保持偶数

考虑 $cd$ 和为偶数的情况下的最好的操作

首先如果 $c=d$ 则一步到位

如果 $c=d=0$ 甚至不用操作

剩下的情况,设 $c$,$d$ 的平均数为 $k$,因为 $c+d$ 为偶数且 $c \neq d$,则 $k$ 为整数且 $k$ 在 $c$,$d$ 中间

两步即可操作完:

1. 将 $a,b$ 同时加 $k$

2. 若 $c$<$d$ 则将 $a$ 减到 $c$ ,$b$ 加到 $d$ ,显然 $a-c=d-b$;反之同理

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int N=2e5+7;
inline int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
int t,a,b;
int main()
{
    cin>>t;
    while(t--)
    {
        a=read(),b=read();
        if(a==0&&b==0) { printf("0\n"); continue; }
        if(a==b) { printf("1\n"); continue; }
        if((a+b)&1) printf("-1\n") ;
        else printf("2\n");
    }
    return 0;
}