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;
}
정렬을 왜함?ㅇㅅㅇ
이분탐색 쓰려고 ㅇㅅㅇ 원배열은 정렬안된 배열이야
정렬 돼 있겠는데?ㅇㅅㅇ
아 음수도 들어가는구나ㅇㅅㅇ
웅 ㅇㅅㅇ 그래서 정석?스럽게 짰는데 ㅠ
생각해보니까 같은 p에 DPB안에 같은 값이 여러개 있어도 하나면 올라갈듯?ㅇㅅㅇ
ㅇㅅㅇ?? 그게 무슨말이야??
저 예제해서 B에 0 추가해보셈ㅇㅅㅇ
오 그러네 여기서 B에 0 추가하면 +2인가? 이상 늘어나야되는데 답에 8 찍히네 오옹..
아 그러네 이게 DPB에도 중복된거 있을때 이거는 카운트를 안하네 ㄷㄷ; DPB에 같은게 2개 있으면 카운트 2배로 올라야되는데 1번만 오르네 ㄷㄷㄷ 와 고마워 프갤로쨩