https://www.acmicpc.net/problem/1744
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
int n, ans,zero;
vector<int> vPlus;
vector<int> vMinus;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
int temp;
cin >> temp;
if (temp > 0) vPlus.push_back(temp);
else if (temp < 0) vMinus.push_back(temp);
else zero = 1;
}
sort(vPlus.rbegin(), vPlus.rend());
sort(vMinus.begin(), vMinus.end());
for (int i = 0; i < vPlus.size(); i++) {
if (i == vPlus.size() - 1) ans += vPlus[i];
else {
if (vPlus[i+1]!=1) {
ans += vPlus[i] * vPlus[i + 1];
i++;
}
else ans += vPlus[i];
}
}
for (int i = 0; i < vMinus.size(); i++) {
if (i == vMinus.size() - 1) {
if (!zero) ans += vMinus[i];
}
else {
ans += vMinus[i] * vMinus[i + 1];
i++;
}
}
cout << ans;
}
처음에 백트래킹으로 접근해 모든 경우를 탐색하려고 해보았으나
수열의 최대 길이 n < 10000 이기에 역시나 시간초과를 받고
그리디하게 재접근해서 해결했다.
자잘한 실수가 있었던 문제