Giả sử chúng ta có bốn số n, x, a và b. Có n học sinh trong hàng. Có hai học sinh đối địch trong số họ. Một trong số chúng ở vị trí a và một trong số chúng ở vị trí b. Các vị trí được đánh số từ 1 đến n từ trái sang phải. Chúng tôi muốn tối đa hóa khoảng cách giữa hai học sinh này. Ta có thể thực hiện phép toán sau x lần:Chọn hai học sinh liền kề rồi đổi chỗ cho nhau. Chúng ta phải tìm khoảng cách lớn nhất có thể sau x lần hoán đổi.
Vì vậy, nếu đầu vào là n =5; x =1; a =3; b =2 thì kết quả sẽ là 2, vì ta có thể hoán đổi học sinh ở vị trí 3 và 4 nên khoảng cách giữa hai học sinh này là | 4 - 2 | =2.
Các bước
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
return minimum of (|a - b| + x) and (n - 1)
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; int solve(int n, int x, int a, int b) { return min(abs(a - b) + x, n - 1); } int main() { int n = 5; int x = 1; int a = 3; int b = 2; cout << solve(n, x, a, b) << endl; }
Đầu vào
5, 1, 3, 2
Đầu ra
2