Когда я пытаюсь определить этот вектор <pair <int, pair>> vp (n) - PullRequest
0 голосов
/ 16 сентября 2018

На выходе есть Дай мне 0 0

#include <bits/stdc++.h>
#define fsv(i , n)  for(int i = 0 ; i < n ; ++i)
using namespace std;

int main()
{
 int n ;
 cin >> n ;
 vector< pair< int , pair<int, int> > > vp(n);
 vector <int> v(n) ;

 fsv(i , v.size())cin >> v[i];

  for(int i = 0 ; i < n ; ++i){
     for(int j = i+1 ; j < n-1 ; ++j){
        vp.push_back(make_pair(abs(v[i]-v[j]) , make_pair(i,j)));
     }
  }
 sort(vp.begin() , vp.end());

 cout << vp[0].second.first << " " << vp[0].second.second;

}

этот код связан с проблемой кода, я знаю, что есть другие способы ... но я спрашиваю, это правильный способ доступа к таким элементам ?! http://codeforces.com/contest/34/problem/A

1 Ответ

0 голосов
/ 17 сентября 2018

Проблема в том, что

vector< pair< int , pair<int, int> > > vp(n);
// ......................................^^^  n initial elements

инициализирует вектор с n элементами и с push_back() you add other n elements`.

После сортировки v элемент v[0] является (я полагаю) одним из инициалов n.

Вы должны создать пустой вектор

vector< pair< int , pair<int, int> > > vp;
// ....................................^^  no more initial elements; empy!

и, просто чтобы ускорить и избежать лишних перемещений, зарезервируйте n в качестве размера (но не обязательно)

vp.reserve(n);

, прежде чем отталкивать n элементов.

Не по теме. Не включайте нестандартный заголовок, например

#include <bits/stdc++.h>
.
...