제 친구의 경우 이분탐색으로 구현하지는 않았지만,
저는 이분탐색을 이용하여 구현하였습니다.(equal_range)
#include#include #include #define MAX 4005 #pragma warning(disable:4996) using namespace std; typedef long long ll; ll ans = 0; int n, d1, d2,map[MAX][4]; vector a, b; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) for (int k = 0; k < 4; k++) scanf("%d", &map[i][k]); for (int i = 0; i < n; i++) for (int k = 0; k < n; k++) { a.push_back(map[i][0] + map[k][1]); b.push_back(map[i][2] + map[k][3]); } sort(a.begin(), a.end()); sort(b.begin(), b.end()); for (int i = 0; i < a.size(); i++) { pair ::iterator, vector ::iterator> iter2 = equal_range(b.begin(), b.end(), -1 * a[i]); d2 = distance(iter2.first, iter2.second); ans += d2; } printf("%lld", ans); return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 1920 수찾기 * (0) | 2018.06.01 |
---|---|
백준(BOJ) 10815 숫자 카드 * (0) | 2018.06.01 |
백준(BOJ) 1931 회의실배정 ** (0) | 2018.06.01 |
백준(BOJ) 1931 로프 * (0) | 2018.06.01 |
백준(BOJ) 1946 신입사원 * (0) | 2018.06.01 |