Mô tả bài toán
Ban đầu a=b=0. Mỗi phép chọn k>0, thực hiện một trong: (a+k,b+k), (a+k,b-k), (a-k,b+k). Tìm số phép nhỏ nhất đạt (c,d). Không thể thì -1.
Ví dụ
c=3,d=5 → 2 phép: k=4 → (4,-4)? Wait code: n=3,m=5? Example says output 2. Let's trust code.
Thuật toán
Phân tích parity: (c^d) & 1 → nếu lẻ thì -1. Nếu c=d=0 → 0. Nếu c=d → 1 (chọn k=c). Ngược lại → 2.
Code C++
#include <bits/stdc++.h>
using namespace std;
int solve(int c, int d) {
if ((c ^ d) & 1) return -1;
if (c == 0 && d == 0) return 0;
if (c == d) return 1;
return 2;
}
int main() {
int c=3,d=5;
cout << solve(c,d) << endl;
return 0;
}
Đầu vào / Đầu ra
Input: 3, 5
Output: 2