https://www.acmicpc.net/problem/2295
1. 이진탐색 발상
nC2들의 합배열 : two
a를 탐색(n^2) * 이진탐색(lgN)
부분합을 구한후, 이진탐색을 하라!!!
2.의사코드
a[i]+a[j]+a[l]=a[k] 인 k 의 최대값 찾기
two(a[i]+a[j])==a[k]-a[l]인 k의 최대값 찾기!
3. 전체코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,a[1004],ret;
vector<ll> two;
set<int> s;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
for(int i=0;i<n;++i){
for (int j = i; j < n; ++j) {
two.push_back(a[i] + a[j]); //nC2의 합들
}
}
sort(a,a+n);
sort(two.begin(), two.end());
for (int i = n - 1; i >= 0; --i) {
for (int j = 0; j < i; ++j) {
if (binary_search(two.begin(), two.end(), a[i] - a[j])) {
ret = max(ret, a[i]);
}
}
}
cout << ret;
return 0;
}
'Algorithm > 이분탐색' 카테고리의 다른 글
프로그래머스 순위검색 c++ // 이분탐색, db설정 (0) | 2024.01.11 |
---|---|
백준 1654 랜선자르기 c++ // 이분탐색, parametric search (0) | 2024.01.04 |
백준 18870 좌표압축 c++ // 이분탐색 (0) | 2024.01.02 |
백준 10816 숫자카드2 c++ // 이분탐색, upper_bound, lower_bound (0) | 2024.01.02 |
백준 1920 수찾기 c++ // 이분탐색 stl (0) | 2024.01.01 |