Hướng dẫn cho Tam giác không cân


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

Authors: SPyofgame


Spoiler Alert


Hint 1

Tìm điều kiện tam giác và loại bỏ điều kiện để nó cân, từ đó suy ra kết quả


Hint 2

Điều kiện độ dài các cạnh: (a > 0) && (b > 0) && (c > 0)

Điều kiện để tạo tam giác: (a + b > c) && (b + c > a) && (c + a > b)

Điều kiện để tam giác cân: (a == b) || (b == c) || (c == a)


Hint 3

Điều kiện tam giác không cân: ((a > 0) && (b > 0) && (c > 0)) && ((a + b > c) && (b + c > a) && (c + a > b)) && !((a == b) || (b == c) || (c == a))


Reference AC code | \(O(1)\) time | \(O(1)\) auxiliary space | Math

C++
int main()
{
    ll a, b, c;
    cin >> a >> b >> c;
    bool ok1 = (a > 0) && (b > 0) && (c > 0);
    bool ok2 = (a + b > c) && (b + c > a) && (c + a > b);
    bool ok3 = (a == b) || (b == c) || (c == a);
    cout << ((ok1 && ok2 && !ok3) ? "YES" : "NO");
    return 0;
}

Hint 4

Bạn cũng có thể sắp xếp các cạnh để có công thức toán học gọn hơn


Reference AC code | \(O(1)\) time | \(O(1)\) auxiliary space | Math

C++
ll max(ll a, ll b)       { return a > b ? a : b; }
ll min(ll a, ll b)       { return a < b ? a : b; }
ll med(ll a, ll b, ll c) { return max(min(a, b), min(c, max(a, b))); }
int main()
{
    ll a, b, c;
    cin >> a >> b >> c;
    tie(a , b , c) = make_tuple(  max(a, max(b, c))  ,  med(a, b, c)  ,  min(a, min(b, c))  );
    cout << ((a > b && b > c && c > 0 && b + c > a) ? "YES" : "NO");
    return 0;
}

Reference AC code | \(O(1)\) time | \(O(1)\) auxiliary space | Math

C++
int main()
{
    ll a, b, c;
    cin >> a >> b >> c;
    if (a < b) swap(a, b); if (a < c) swap(a, c); if (b < c) swap(b, c); /// sort 3 so
    cout << ((a > b && b > c && c > 0 && b + c > a) ? "YES" : "NO");
    return 0;
}


Bình luận


  • 0
    letangphuquy    6:39 p.m. 9 Tháng 6, 2020

    Có cách làm gọn hơn nữa, ta nhận thấy để thỏa mãn BĐT tam giác thì chỉ cần cạnh lớn nhất bé hơn tổng 2 cạnh còn lại là được (từ đây dễ dàng suy ra các BĐT khác) \n
    Vì thế ta nhập độ dài 3 cạnh vào mảng a[3], sắp xếp a[0] <= a[1] <= a[2] \n
    Điều kiện ok1 = a[0] > 0 \n
    Điều kiện ok2 = a[0] + a[1] > a[2] \n
    Điều kiện ok3 = (a[0] != a[1]) and (a[1] != a[2]) \n

    2 phản hồi

    • 2
      Small    2:23 p.m. 9 Tháng 6, 2020

      Điều kiện \((a>0)\&\&(b>0)\&\&(c>0)\) này không cần vì \((a>0)\&\&(b>0)\&\&(c>0)\) đã bao trùm lên nó

      2 phản hồi