백준 2143번, 두 배열의 합 풀이
2021. 1. 29. 13:04ㆍProblem Solving/백준
문제
풀이
$ T = A$의 부분 누적합 + $B$의 부분 누적합으로 둘 수 있으며,
$A$의 부분 누적합이 $k$가 되는 경우의 수를 $N^2$에 찾을 수 있습니다.
$B$의 부분 누적합 + $k = T$가 되어야 하는데, $k$는 위에서 전처리한 경우의 수만큼 될 수 있습니다.
소스코드
#include <bits/stdc++.h>
#define all(v) v.begin(), v.end()
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef unordered_map<int, int> mpii;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t, n, m;
cin >> t;
mpii sum;
cin >> n;
vi A(n + 1);
for (int i = 1; i <= n; i++) cin >> A[i], A[i] += A[i - 1];
for (int i = 1; i <= n; i++)
for (int j = i; j <= n; j++)
sum[A[j] - A[i - 1]]++;
cin >> m;
vi B(m + 1);
for (int i = 1; i <= m; i++) cin >> B[i], B[i] += B[i - 1];
ll ans = 0;
for (int i = 1; i <= m; i++)
for (int j = i; j <= m; j++) {
int s = t - B[j] + B[i - 1];
ans += sum[s];
}
cout << ans;
}
'Problem Solving > 백준' 카테고리의 다른 글
백준 16940번, BFS 스페셜 저지 풀이 (0) | 2021.02.18 |
---|---|
백준 2201번, 이친수 찾기 풀이 (0) | 2021.02.05 |
백준 2737번, 연속 합 풀이 (0) | 2021.01.27 |
백준 2560번, 짚신벌레 풀이 (0) | 2021.01.26 |
백준 10986번, 나머지 합 풀이 (0) | 2021.01.23 |