题意如上。
我们分四种情况讨论。
1.c = d,且不为0,则我们进行一次操作1就可以直接做到,需要一次操作。
2.c = d,且为0,则无需操作。
3.c + d 为偶数,则说明c和d要么都是偶数或者奇数,对于全是奇数或者全是偶数,c和d的差值一定是2*n,假设一个数c=4,d=6,目标达到(5,5),差值为2*1,这样的话,我们可以让c减去1,d加上1达到(5,5),若c=4,d=5,那么无论如何都达不到(5,5)。对于奇数同理,假设一个数c=3,d=5,目标达到(4,4),我们可以让c减1,d加1达到(4,4),而c=3,d=4则无论如何都达不到(4,4)。
4.c + d 为奇数,那么一定达不到。就像第三点所说的c=3,d=4和c=4,d=5。
那么对于第三种情况,我们只需要从初始(0,0),进行操作1,加到目标对的中间值,比如(3,5)中间值为(3+5)/2=4,我们就第一次操作是让a和b都加上4变成了(4,4),然后用4算出跟目标对的任意一个数的差值,比如3,那么差值为1,同理5差值也为1,让(4,4)将差值作为k进行操作2或3,根据这个例子,显然我们进行操作3。那么我们使用了两步,达到目标。
#include<stdio.h>
int main() {
int a, b;
while (scanf("%d",&a)!=EOF) {
scanf("%d",&b);
if (a == b && a) { // 情况1
printf("1\n");
}
else if (a == b && a == 0) { // 情况2
printf("0\n");
}
else if ((a + b) % 2 == 0) { // 情况3
printf("2\n");
}
else {
printf("-1\n"); // 情况4
}
}
return 0;
}