https://www.acmicpc.net/problem/14921
진짜 구라아니고
너무화가난다 스스로한테
아니진짜미친거아님>????ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
일단 1차 삽질...
이게 무차별적 미친 경우의 수로 조합이 아닐걸 알지만..... 그냥 풀어버림
#include <iostream>
using namespace std;
typedef long long ll;
int N;
ll result = 200'000'000;
ll arr[100'001];
bool visited[100'001] = { false, };
void Combine(ll a, ll b)
{
long long value = arr[a] + arr[b];
result = abs(result) < abs(value) ? result : value;
}
void GetCombine(int depth)
{
if (depth == N) return;
for (int i = depth + 1; i <= N; i++) {
Combine(depth, i);
}
GetCombine(depth+1);
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> arr[i];
}
GetCombine(1);
cout << result << endl;
}
결과는?
당연히
시
간
초
과
ㅎㅎ
...
정신을 좀 차리자.
이건 정석적인 이분탐색 문제임
왜냐?
a + b의 값이 최소인걸 찾는다 -> 정렬된 상태에서 양쪽 끝에서 다가오면 된다.
투포인터 이분탐색에 대해서는 뭔가
문제를 보고 아 이거 투포인터구나!! 하는 생각이 잘 안드는듯.. 좀 더 풀어봐야겠따..
그래서 아 투포인터구나 해서 풀었다!!???
근데 이게
이게 뭐임
그냥 너무 얼탱ㅇ이가 없어서
다른 분들 풀이도 찾아봤는데 문제가 없는것같음 진짜
근데
ㅋㅋ
ㅋㅋㅋ
result
값을 최댓값으로 선택해주는데, 제대로 안해줘서 반례로 max + max인 경우에 걸린거다
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
개뿍친다 진심
이거 하...
제발 정신차리고 !!
MAX값 설정 잘하자 !!
이거 두 번째임 하 ㅜㅜ
#include <iostream>
using namespace std;
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int N;
int arr[100'001];
int result = 200'000'100;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
int left = 0;
int right = N-1;
while (left < right) {
int sum = arr[left] + arr[right];
result = abs(sum) < abs(result) ? sum : result;
if (sum > 0) --right;
else ++left;
}
cout << result;
}