CSES - Sum of Two Values | Tổng hai giá trị

Xem PDF



Tác giả:
Dạng bài
Điểm: 900 Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Bạn được cho một mảng gồm \(n\) số nguyên và nhiệm vụ của bạn là tìm hai giá trị (tại các vị trí phân biệt) có tổng là \(x\).

Input

  • Dòng đầu vào đầu tiên có hai số nguyên \(n\)\(x\): kích thước mảng và tổng mong muốn.
  • Dòng thứ hai có \(n\) số nguyên \(a_1,a_2,\ldots,a_n\): các giá trị của mảng.

Output

  • In hai số nguyên: vị trí của các giá trị. Nếu có một số lời giải, bạn có thể in bất kỳ lời giải nào trong số đó. Nếu không có lời giải nào, in IMPOSSIBLE.

Constraints

  • \(1 \leq n \leq 2 \cdot 10 ^ 5\)
  • \(1 \leq x, a_i \leq 10 ^ 9\)

Example

Sample input

4 8
2 7 5 1

Sample output

2 4


Bình luận

  • minhskibidi 10:34 a.m. 9 Tháng 1, 2025

    bài này là two sum trong leetcode nè
    trong 300 bài code thiếu nhi cx có

    • thiennguyen1k998 5:40 p.m. 3 Tháng 12, 2024
      c++

      ``` cpp
      #include <bits/stdc++.h>
      using namespace std;

      int main() {
          int n, x;
          cin >> n >> x;
          vector<int> a(n);
          for (int i = 0; i < n; i++) {
              cin >> a[i];
          }
      
          unordered_map<int, int> m;
      
          for (int i = 0; i < n; i++) {
              int s= x - a[i];
              if (m.find(s) != m.end()) {
                  cout << m[s] + 1 << " " << i + 1 << endl;
                  return 0;
              }
              m[a[i]] = i;
          }
      
          cout << "IMPOSSIBLE" << endl;
          return 0;
      }
      ```
      
      • SleanaVP 1:00 p.m. 16 Tháng 11, 2024

        include<bits/stdc++.h>

        define ll long long

        using namespace std;

        const int maxN = 200005;
        int n, k;
        ll a[maxN], b[maxN];

        int indexx = 0;
        int findPosition(ll arr[], ll x) {
        for (int i = 0; i < n; i++) {
        if (arr[i] == x && i != indexx - 1) {
        return i + 1;
        }
        }
        return 0;
        }

        void find() {
        sort(a, a + n);
        for (int i = 0; i < n; i++) {
        ll al = a[i];
        ll ar = k - al;

            int left = i + 1;
            int right = n - 1;
            while (left <= right) {
                int mid = (left + right) / 2;
                if (a[mid] == ar) {
                    int idxl = findPosition(b, al);
                    indexx = idxl;
                    int idxr = findPosition(b, ar);
                    cout << idxl << " " << idxr << "\n";
                    return;
                }
                if (a[mid] > ar) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            }
        }
        cout << "IMPOSSIBLE";
        

        }

        int main() {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);

        cin >> n >> k;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            b[i] = a[i];
        }
        
        find();
        return 0;
        

        }

        • huyphanvanquoc 5:39 p.m. 14 Tháng 6, 2024

          using namespace std;
          ll n,x;
          pii a[200001];
          int search(ll l,ll r, ll x)
          {
          ll ans=-1;
          while (l<=r)
          {
          ll mid=(l+r) / 2;
          if (a[mid].first==x)
          {
          ans=mid;
          return ans;
          }
          if (a[mid].first>x) r=mid-1; else l=mid+1;
          }
          return ans;
          }
          int main()
          {
          cin>>n>>x;
          for(int i=1;i<=n;i++)
          {
          cin>>a[i].first;
          a[i].second=i;
          }
          sort(a+1,a+n+1);
          for(int i=1;i<=n;i++)
          {
          ll k=x-a[i].first;
          ll vt=search(1,n,k);
          if (vt!=-1 && a[i].first+a[vt].first==x && a[i].second!=a[vt].second)
          {
          if (a[i].second<a[vt].second) cout<<a[i].second<<" "<<a[vt].second; else cout<<a[vt].second<<" "<<a[i].second;
          return 0;
          }
          }
          cout<<"IMPOSSIBLE";
          }

          • thanhlong2k9 1:09 p.m. 25 Tháng 2, 2024 chỉnh sửa 2

            bài này chỉ cần dùng chặt nhị phân với dùng kiểu pair là ra r:))
            mình gửi code của mình mn tham khảo:)))

            include <bits/stdc++.h>

            define ll long long

            define pii pair <ll,ll>

            using namespace std;
            ll n,x;
            pii a[200001];
            int search(ll l,ll r, ll x)
            {
            ll ans=-1;
            while (l<=r)
            {
            ll mid=(l+r) / 2;
            if (a[mid].first==x)
            {
            ans=mid;
            return ans;
            }
            if (a[mid].first>x) r=mid-1; else l=mid+1;
            }
            return ans;
            }
            int main()
            {
            cin>>n>>x;
            for(int i=1;i<=n;i++)
            {
            cin>>a[i].first;
            a[i].second=i;
            }
            sort(a+1,a+n+1);
            for(int i=1;i<=n;i++)
            {
            ll k=x-a[i].first;
            ll vt=search(1,n,k);
            if (vt!=-1 && a[i].first+a[vt].first==x && a[i].second!=a[vt].second)
            {
            if (a[i].second<a[vt].second) cout<<a[i].second<<" "<<a[vt].second; else cout<<a[vt].second<<" "<<a[i].second;
            return 0;
            }
            }
            cout<<"IMPOSSIBLE";
            }

            • LeBaoAn 6:09 p.m. 25 Tháng 11, 2023

              Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.

              • Vudoanh908 12:29 a.m. 19 Tháng 10, 2022

                Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.