Cho tâm của 3 đoạn thẳng cùng độ dài L. Có thể dịch mỗi tâm tối đa K. Tìm độ dài giao lớn nhất của 3 đoạn sau khi dịch.
Thuật toán
- Sắp xếp 3 tâm: c[0] ≤ c[1] ≤ c[2].
- Khoảng cách max-min = c[2]-c[0].
- Nếu ≥ 2K+L → không giao nhau → 0.
- Nếu ≥ 2K → giao = 2K - (c[2]-c[0]-L).
- Ngược lại → giao = L (có thể làm trùng hoàn toàn).
Ví dụ triển khai (C++)
#include <bits/stdc++.h>
using namespace std;
int max_intersection(int* center, int length, int k) {
sort(center, center + 3);
if (center[2] - center[0] >= 2*k + length) return 0;
else if (center[2] - center[0] >= 2*k)
return 2*k - (center[2] - center[0] - length);
else return length;
}
int main() {
int center[3] = {1, 2, 3};
int L = 1, K = 1;
cout << max_intersection(center, L, K);
return 0;
}
Đầu ra
1