[Đồng Tháp - TS10 - 2025] Bài 4: Đổi quà

Xem dạng PDF

Gửi bài giải

Điểm: 14,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Output Only, Pascal, PyPy, Python, Scratch, TEXT

Cuối năm học, Nam được bố mẹ cho tham gia hội trại hè. Tại hội trại, Nam tích cực tham gia các hoạt động và giành được số điểm ~m~. Nam muốn tặng bố mẹ mỗi người một món quà theo chương trình đổi điểm lấy quà của Ban tổ chức. Biết rằng Ban tổ chức có ~n~ món quà, món quà thứ ~i~ có giá trị ~a_i~ tương ứng phải dùng ~a_i~ điểm để đổi (~1 \le i \le n~). Với số điểm hiện có, Nam quyết định sẽ đổi thành hai món quà khác nhau có tổng giá trị lớn nhất.

Yêu cầu: Hãy xác định tổng giá trị lớn nhất của hai món quà mà Nam có thể đổi được tương ứng với điểm số ~m~ hiện có.

Input

  • Dòng thứ nhất ghi hai số nguyên ~n~ và ~m~ (~1 \le n \le 10^5~, ~1 \le m \le 10^9~).
  • Dòng thứ hai ghi ~n~ số nguyên ~a_1, a_2, \dots, a_n~ (~1 \le a_i \le 10^9~, ~i=1..n~).

Output

Tổng giá trị lớn nhất của hai món quà mà Nam có thể đổi được tương ứng với điểm số ~m~ hiện có. Nếu không thể đổi được hai món quà khác nhau thì ghi số -1.

Sample Input

8 10
6 3 8 10 6 19 4 19

Sample Output

10

Subtasks

  • Có ~60\%~ số test tương ứng ~60\%~ số điểm có ~1 \le n \le 10^3~.
  • Có ~40\%~ số test tương ứng ~40\%~ số điểm có ~10^3 < n \le 10^5~.

Bình luận

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



  • 0
    tikl20tok  đã bình luận lúc 1, Tháng 3, 2026, 8:15

    include<bits/stdc++.h>

    using namespace std; bool a[(long long)1e6+10];

    int main() {

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    
    long long n,m;
    cin>>n>>m;
    long long i,j;
    vector&lt;long long> a;
    a.reserve(n+5);
    a.push_back(0);
    long long vitri=0;
    bool kt=false;
    long long bestsum=-2e18;
    for (i=1;i<=n;i++)
    {
        cin>>j;
        a.push_back(j);
        if (j==m)//truong hop chon 1 mon hay 2 mon
        {
            kt=true;
            vitri=i;
        }
    }
    if (kt==false)//neu quyet dinh chon 2 mon
    {
        bool kt2=false;
        sort(a.begin()+1,a.end());
        j=n;
        for (i=1;i&lt;j;i++)
        {
            while (a[i]+a[j]>m&&j>i)
            {
                j--;   
            }
            if (a[i]+a[j]<=m)
            {
                bestsum=max(bestsum,a[i]+a[j]);
                kt2=true;//dieu nay keim tra xem 1 tong <=m tuc la co the doi hay khong
            }
        }
        if (kt2==true)
            cout<&lt;bestsum;
        else
            cout<<-1;
    }
    else
    {
        cout<&lt;a[vitri];
    }
    
    
    
    
    return 0;
    

    } code day moi nguoi nhe loi cu phap khi dang tren web thi moi nguoi tu sua nhe


  • 1
    mthao  đã bình luận lúc 8, Tháng 2, 2026, 14:06

    test ví dụ ouput phải bằng 9 chứ nhỉ?


    • 0
      tikl20tok  đã bình luận lúc 1, Tháng 3, 2026, 8:08

      Cong nhan la nhu vay that. Nhung ma thuc te thi neu nhu de bai hoi 2 mon qua khac nhau, dieu do dong nghia voi viec chon hoac khong chon. Tu do suy ra 10 co the la ket qua.


  • 1
    wirodeptraivaiz  đã bình luận lúc 5, Tháng 2, 2026, 14:44

    bài này ví dụ sai mọi người nhé, cho n = 10 mà chỉ có 8 món, mong admin fix lại ạ!


    • 1
      clue_  đã bình luận lúc 8, Tháng 2, 2026, 8:54

      Mình đã fix nha. Cảm ơn bạn đã phản hồi!