https://www.acmicpc.net/problem/2143


예제는 맞는데 9%에서 틀렸다고 그러네 ㅇㅅㅇ;


#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int main()
{
    // 골드 3 문제 (정답률 30%)
    // 한 배열에 A[1], A[2],...에 대해 부 배열은 A[i], ... A[j] (1<=i<=j<=n)을 말함.
    // 부 배열의 합 = i~j번째까지 더한거.
    // A랑 B배열 주어졌을 때, A부+B부 = T가 되는 쌍의 개수를 구하라.

    // A, B 배열 총 길이 = 1000.


    // 입력받는 부분
    ll T;
    int n, m;
   
    cin >> T;
    int tmp;
    cin >> n;

    vector<int> A, B;

    for(int i=0;i<n; i++)
    {
        cin >> tmp;
        A.push_back(tmp);
    }
    cin >> m;
    for(int j=0; j<m; j++)
    {
        cin >> tmp;
        B.push_back(tmp);
    }

    // A, B의 부분합 DP 벡터
    vector<ll> DPA;
    vector<ll> DPB;

    // 부분합 저장
    for(int i=0; i<n; i++)
    {
        tmp=0;
        for(int j=i; j<n; j++)
        {
            tmp += A.at(j);
            DPA.push_back(tmp);
        }
    }
    for(int i=0; i<m; i++)
    {
        tmp = 0;
        for(int j=i; j<m; j++)
        {
            tmp += B.at(j);
            DPB.push_back(tmp);
        }
    }
    // 부분합 정렬
    sort(DPA.begin(), DPA.end());
    sort(DPB.begin(), DPB.end());

    int cnt = 0;
    // 이분탐색으로 부분합 일치하는거 찾기
    for(auto p : DPA)
    {
        if(binary_search(DPB.begin(), DPB.end(), T-p))
        {
            cnt ++;
        }
    }

    cout << cnt;
}