Мои извинения, я знаю, что на этот тип вопроса уже есть ответ здесь, но я не мог понять, как использовать его для своего кода. Я написал программу для соревнования по решению задач, которая принимает массив и пытается максимизировать значение |Ax-Ay|+|Ay-Az|+|Az-Ax| по всем тройкам попарно различных действительных индексов (x, y, z). Программа имеет следующие ограничения:
- 1≤t≤5
- 3≤n≤10^5
- |Ai|≤10^9 для каждого действительного i
Я получаю следующую ошибку, когда пытаюсь запустить его: вызывается завершение после создания экземпляра 'std::bad_alloc' what(): std::bad_alloc. Все, что я смог понять из ответов на вопросы, это то, что мой код сталкивается с проблемой выделения памяти, но я не мог найти, где и когда это происходит? Может быть, когда речь идет о больших значениях? Что вызывает ошибку?
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef vector<ll> vll;
typedef vector<int> vi;
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define repi(i, a, b) for (ll i = a; i <= b; i++)
#define repn(i, a, b) for (ll i = a; i >= b; i--)
#define fast() \
ios_base::sync_with_stdio(false); \
cin.tie(NULL); \
cout.tie(NULL)
#define all(x) (x).begin(), (x).end()
// solve() function
void solve()
{
ll n;
cin >> n;
vll v(n);
rep(i, 0, n)
cin >>
v[i];
sort(all(v));
ll x = v[0], y = v[1], z = v[n - 1];
ll ans = abs(x - y) + abs(y - z) + abs(z - x);
cout << ans << endl;
}
// driver function
int main()
{
fast();
ll t = 1;
cin >> t;
rep(i, 0, t)
{
solve();
}
return 0;
}
Формат ввода следующий:
Input
The first line of the input contains a single integer T denoting the number of test cases. The description of T test cases follows.
The first line of each test case contains a single integer N.
The second line contains N space-separated integers A1, A2,…,AN.
Ниже приведен пример ввода:
3
3
2 7 5
3
3 3 3
5
2 2 2 2 5
n
, который очень большой, но вектор не может выделить столько памяти, чтобы зарезервировать столько, сколько вам нужно для этогоvll.reserve(n)
. это может решить вашу проблему, потому что при вводеn
вектор выделяет больше памяти, чем нужно, зависит от реализации компилятора. - person foragerDev   schedule 08.02.2021t
и особенноn
имеют разумные значения. - person Quentin   schedule 08.02.2021ans
использует три различных индекса. Два других эквивалентны2 * abs(v[1] - v[n-1])
и2 * abs(v[0] - v[n-1])
, и первое не может быть больше второго. (Насколько я могу судить, это почти вопрос с подвохом; я не думаю, что вам нужен вектор или какая-либо сортировка.) - person molbdnilo   schedule 08.02.2021