Dãy 2-Sum

Xem dạng PDF

Gửi bài giải


Điểm: 0,89 (OI)
Giới hạn thời gian: 0.38s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

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

Một dãy các số nguyên không âm ~A_{1 \dots N}~ được gọi là 2-Sum nếu ta có thể tách dãy đó làm ~2~ dãy có tổng các giá trị bằng nhau. Nghĩa là tồn tại một số ~k~ trong đoạn ~[1 \dots N-1]~ sao cho tổng ~A_{1} + A_{2} + \dots + A_{k} = A_{k + 1} + A_{k + 2} + \dots + A_{N}~.

Cho ~1~ dãy gồm ~N~ số nguyên không âm. Hãy tìm dãy con gồm các phần tử liên tiếp dài nhất mà cũng là dãy 2-Sum.

Input

Dòng đầu tiên chứa số nguyên ~N~ ~(2 \le N \le 5000)~.

~N~ dòng tiếp theo, dòng thứ ~i~ chứa giá trị của phần tử ~A_{i}~ của dãy. ~(0 \le A_{i} \le 200000)~

Output

Xuất ra độ dài lớn nhất của dãy 2-Sum tìm được. Nếu không có kết quả thì in ra ~0~.

Sample Input

6
2
10
3
2
5
1

Sample Output

4

Note

Giải thích: dãy 2-Sum dài nhất tìm được là A[2..5] = {10, 3, 2, 5}. Có thể tách dãy này thành 2 phần {10} và {3, 2, 5} có tổng bằng 10.


Bình luận

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



  • 0
    minhduc2011  đã bình luận lúc 14, Tháng 11, 2025, 14:58

    include <bits/stdc++.h>

    define ll long long

    define pb push_back

    define pol LLONG_MAX

    define pel LLONG_MIN

    define ull unsigned long long

    define rep(i,a,b) for(int i=a;i<b;i++)

    define fope(name) if(fopen(name".inp","r")){freopen(name".inp","r",stdin);freopen(name".out","w",stdout);}

    using namespace std; const ll MOD = 1e9+7; const ll INF = 1000005; ll n,m,k,x=0,d1=0,z,ans,res; ll a[INF],f[INF]; void input(){ cin >> n; f[0]=0; for(ll i=1;i<=n;i++){ f[i]=f[i-1]; cin >> a[i]; f[i]+=a[i]; } } void output(){
    ans=0; for(ll k=1;k<=n;k++){ ll i=k,j=k+1; ll st=a[i],ss=a[j]; while(true){ if(st==ss) ans=max(ans,j-i+1); if(st>ss){ if(j<n){ j++; ss=ss+a[j]; } else break; } else{ if(i>1){ i--; st+=a[i]; } else break; } } } cout << ans; } int main(){ ios::syncwithstdio(0);
    cin.tie(0); fope("day2sum"); input(); output(); return 0;
    }


  • 1
    ngoccaidu2008  đã bình luận lúc 29, Tháng 10, 2025, 14:33

    Ý tưởng với mỗi giá trị k ta mở rộng từ trung tâm

    code tham khảo:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #define __Hormer_Nguyen__ signed main()
    #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
    const int maxn=5+1e6;
    int n;
    int a[maxn];
    int ans=0;
    __Hormer_Nguyen__
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n;
        for (int i=1;i<=n;i++)
            cin>>a[i];
        for (int k=1;k<n;k++)
        {
            int i=k,j=k+1;
            int st=a[i],ss=a[j];
            while (true)
            {
                if (st==ss) ans=max(ans,j-i+1);
                if (st>ss)
                {
                    if (j<=n-1)
                    {
                        j++;
                        ss+=a[j];
                    }else break;
                }else
                {
                    if (i>=2)
                    {
                        i--;
                        st+=a[i];
                    }else break;
                }
            }
        }cout<<ans;
    }
    

  • 2
    vominhmanh10  đã bình luận lúc 16, Tháng 9, 2025, 12:27 sửa 3

    với mỗi k, hai con trỏ đối xứng rộng ra là được, áp dụng với 2 * p[k] = p[l] + p[r] cho đoạn [l + 1...r], O(n^2) ok rồi, làm có 0,07s hà

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        int n; cin >> n;
        vector<int> a(n), p(n + 1, 0);
        for (int &x : a) cin >> x;
        for (int i = 1; i <= n; i++) p[i] = p[i - 1] + a[i - 1];
        int ans = 0;
        for (int k = 1; k < n; k++) {
            int l = k - 1, r = k + 1;
            while (l >= 0 && r <= n) {
                int x = p[l] + p[r];
                if (x == 2 * p[k]) {
                    ans = max(ans, r - l);
                    l--; r++;
                }
                else if (x > 2 * p[k]) l--;
                else r++;
            }
        }
        cout << ans;
    }
    

  • 6
    huygd  đã bình luận lúc 30, Tháng 8, 2024, 6:40

    Bài này prefix sum vẫn ac được!


  • -4
    nguyenhuubaohv  đã bình luận lúc 22, Tháng 6, 2024, 18:19

    ai hd mik lam bai nay vs mik cam on


  • -5
    nhatday1  đã bình luận lúc 13, Tháng 10, 2023, 8:36

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 1
    Cadoc  đã bình luận lúc 9, Tháng 7, 2023, 15:14

    mình code 2 pointer bth AC xong vào thấy các ngài code chặt nhị phân tự nhiên thấy hoang mang ghê @@


    • -13
      quyet  đã bình luận lúc 3, Tháng 8, 2023, 8:54

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


      • -6
        darwinkay2201  đã bình luận lúc 21, Tháng 7, 2024, 17:52

        Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -16
      hmkhanh472010  đã bình luận lúc 10, Tháng 7, 2023, 1:47

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -14
    MaiThanh1342  đã bình luận lúc 23, Tháng 6, 2023, 15:00

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -12
    nguyenoanh93  đã bình luận lúc 13, Tháng 4, 2023, 2:53

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -12
    nguyenoanh93  đã bình luận lúc 13, Tháng 4, 2023, 1:33 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -22
    abcn2211  đã bình luận lúc 3, Tháng 9, 2022, 12:32

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -36
    shiinehata  đã bình luận lúc 17, Tháng 12, 2021, 17:21

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -12
      dangbesttoan24  đã bình luận lúc 20, Tháng 10, 2022, 16:46

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -97
    DoanTungLamKoCopyCode  đã bình luận lúc 2, Tháng 11, 2021, 9:10

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.