설명없음

백준 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