Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Giao lớn nhất của 3 đoạn thẳng bằng cách dịch tâm trong C++


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