LTC_2C - Bộ ba hoàn hảo (bản trung bình)

Xem dạng PDF

Gửi bài giải


Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 512M

Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift

Cho mảng số nguyên ~A~ có ~n~ phần tử được nhập từ bàn phím. Một bộ ba hoàn hảo là tích có giá trị lớn của 3 phần tử ở các vị trí khác nhau trong mảng.

Bởi vì một mảng có thể có nhiều bộ ba hoàn hảo nên chúng tôi cần biết tích của chúng để dễ dàng kiểm tra. Hãy giúp LCOJ viết chương trình đưa ra tích của bộ ba hoàn hảo mà bạn tìm được.

Input

  • Dòng 1 là số lượng phần tử của mảng ~n~
  • Dòng tiếp theo là ~n~ số nguyên tương ứng là các phần tử của mảng

Biết rằng

  • ~n \in N^*~ và  ~3 \le n \le 10^7~
  • Các phần tử của mảng ~|A_{i}| \le 10^4~

Output

Tích lớn nhất mà bạn tìm được

Sample

Input #1
5
1 2 3 4 5
Output #1
60

Giải thích: Bộ ba hoàn hảo trong trường hợp này là ~(3, 4, 5)~.


Bình luận

Please read the guidelines before commenting.



  • 0
    hagiabaodz2k13  đã bình luận lúc 27, Tháng 7, 2026, 9:01

    Ý tưởng ngắn gọn dễ hiểu : Bình thường khi muốn tìm tích lớn nhất thì ta lấy tích 3 số lớn nhất khi sort mảng nhưng bài này có số âm thì chúng ta cần thực hiện thêm một bước nữa đó là so sánh giữa tích 3 số lớn nhất và tích 2 số nhỏ nhất nhân với số lớn nhất Full AC cho AE tham khảo

    #include<bits/stdc++.h>
    using namespace std;
    using ll=long long;
    using i128=__int128;
    using ld=long double;
    ll a[10000000];
    int main()
    {
        cin.sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        ll n;
        cin>>n;
        for(ll i=1;i<=n;i++)
        {
                cin>>a[i];
        }
        sort(a+1,a+n+1,greater<ll>());
        ll k=a[n]*a[n-1]*a[1];
        cout << max(a[1]*a[2]*a[3],k);
    }
    

  • 0
    lamtn22114  đã bình luận lúc 19, Tháng 7, 2026, 13:44

    Code tham khảo

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        ios_base::sync_with_stdio(false); cin.tie(nullptr); 
        long long n; 
        if (!(cin >> n)) return 0;
        long long max1 = -1e18, max2 = -1e18, max3 = -1e18, min1 = 1e18, min2 = 1e18;
        for (int i = 0; i < n; i++) {
            long long x;
            cin >> x;
            if (x > max1) {
                max3 = max2;
                max2 = max1;
                max1 = x;
            } else if (x > max2) {
                max3 = max2;
                max2 = x;
            } else if (x > max3) {
                max3 = x;
            }
            if (x < min1) {
                min2 = min1;
                min1 = x;
            } else if (x < min2) {
                min2 = x;
            }
        }
        long long ans = max({max1 * max2 * max3, min1 * min2 * max1});
        cout << ans;
        return 0;
    }
    

  • 0
    bnpdat2012  đã bình luận lúc 3, Tháng 6, 2026, 13:07

    các bạn dùng c++ nhớ thêm ios_base nhé


  • 0
    Sekenadddddddd2  đã bình luận lúc 11, Tháng 12, 2025, 11:55

    test 10 là gì v mn


  • 1
    uynday124  đã bình luận lúc 12, Tháng 4, 2025, 2:55

    bai nay ac nhu nao a


  • -2
    sonphucphuc  đã bình luận lúc 4, Tháng 2, 2024, 3:50

    Chỉ 1 vòng for 10^7 mà Python vẫn bi LTE