Free Contest 105 - MAXREM

Xem dạng PDF

Gửi bài giải

Điểm: 0,80 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

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

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài

Lưu ý: các bạn không nhập, xuất dữ liệu bằng file kể cả khi đề bài có yêu cầu. Đọc, ghi dữ liệu được thực hiện ở stdin và stdout.


Bình luận

Hãy đọc nội quy trước khi bình luận.



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

    Gợi ý:

    khi một số chia lấy dư cho số lớn hơn nó thì luôn bằng nó.

    Lấy số lớn thứ sai khác số thứ nhất là đáp án.


  • 3
    lvnhatquang1212  đã bình luận lúc 24, Tháng 7, 2025, 14:17

    Hint :

    Phép chia dư x % y luôn nhỏ hơn y. Vì vậy, nếu muốn ai % aj lớn thì aj phải lớn,
    Nếu ai = aj thì ai % aj = 0. Điều này không có giá trị lớn, nên ta sẽ loại bỏ các cặp có cùng giá trị,
    Do đó, cặp (ai, aj) có khả năng cho kết quả lớn là khi aj là phần tử lớn nhất trong mảng và ai là một số nhỏ hơn nó.
    

    Code:

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int n; // khai báo trước đã :)
        cin >> n; // nhập n 
        vector<int> a(n); // khai báo mảng a 
        for (int &x : a) cin >> x; // Nhập từng phần tử 
        sort(a.begin(), a.end()); // Sort theo thứ tự tăng dần cho thuận tiện tìm max, cụ thể là lười for :))) 
        int res = 0, mx = a[n-1]; // khai báo kết quả và phần tử lớn nhất
        for (int i = 0; i < n-1; ++i) {
            if (a[i] < mx) res = max(res, a[i]); // nếu nhỏ hơn max thì có thể là kết quả luôn
        }
        for (int i = 0; i < n; ++i) {
            if (a[i] == mx) continue; // bỏ qua phần tử lớn nhất, vì chia cho chính nó là dư 0 (nên coutinue cho đỡ tốn thời gian)
            int x = mx % a[i]; // tính dư khi chia max cho a[i]
            res = max(res, x); // cập nhật kết quả lớn nhất giữa kq mới và kq cũ
        }
        cout << res; // xuất kq 
    }
    

    Đây là lần thứ hai mình viết hint ( chưa đủ kinh nghiệm ), nên nếu có chỗ nào chưa chính xác hoặc còn sai sót thì mong các bạn thông cảm và bình luận phía dưới để mình sữa nhé <3
    Mình sẽ cố gắng ghi chính xác hơn ở những lần sau :(


    • 2
      pppssslc  đã bình luận lúc 24, Tháng 7, 2025, 15:23 chỉnh sửa

      Góp ý:

      Tóm lại thì đáp án của bài toán này chính là phần tử lớn thứ hai của dãy số khi đã loại bỏ các phần tử trùng nhau.

      Comment lời giải chi tiết nên được để trong spoiler. Bạn có thể đọc ở phần nội quy.

      Xin trân trọng cảm ơn.


      • 0
        lvnhatquang1212  đã bình luận lúc 26, Tháng 7, 2025, 7:02 sửa 6

        Cảm ơn bạn đã góp ý.

        Mình sẽ rút kinh nghiệm, đọc kỹ nội quy hơn và trình bày đầy đủ, đúng quy định trong những lần sau <3

        Bạn có thể chỉ giúp mình cách spoiler code đc k

        Mình mới qua VNOI viết bl nên ko rõ lắm :(