설명없음
백준 7453: 합이 0인 네 정수 [C/C++]
치킨먹고싶어요
2022. 6. 13. 21:24
https://www.acmicpc.net/problem/7453
7453번: 합이 0인 네 정수
첫째 줄에 배열의 크기 n (1 ≤ n ≤ 4000)이 주어진다. 다음 n개 줄에는 A, B, C, D에 포함되는 정수가 공백으로 구분되어져서 주어진다. 배열에 들어있는 정수의 절댓값은 최대 228이다.
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
#define fastio() ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
long long N, ans;
long long d[4444][4];
void input();
void solve();
int main() {
fastio();
input(); // 입력
solve(); // 풀기
return 0;
}
void input() { // 입력
cin >> N;
for (int i = 0; i < N; i++) cin >> d[i][0] >> d[i][1] >> d[i][2] >> d[i][3];
}
void solve() { // 풀기
vector<long long> left(N * N);
vector<long long> right(N * N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
left[N * i + j] = d[i][0] + d[j][1];
right[N * i + j] = d[i][2] + d[j][3];
}
}
sort(left.begin(), left.end());
sort(right.begin(), right.end());
for (int i = 0; i < N * N; i++)
if (-left[i] == *lower_bound(right.begin(), right.end(), -left[i]))
ans += upper_bound(right.begin(), right.end(), -left[i]) - lower_bound(right.begin(), right.end(), -left[i]);
cout << ans;
}
|
cs |