【问题标题】:When i try to define this vector< pair< int , pair<int, int> > > vp(n)当我尝试定义这个向量< pair< int , pair<int, int> > > vp(n)
【发布时间】:2019-02-20 19:44:10
【问题描述】:

有输出给我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

【问题讨论】:

  • 请不要这样做:#define fsv(i , n) - 它确实不会使您的代码更易于阅读或遵循,相反:现在我必须在阅读时更加努力地思考。一般来说,在 C++ 中尽可能避免使用预处理器宏,尤其是在控制流语句中避免使用它们。
  • 或者,std::tuple&lt;int, int, int&gt; 从 C++11 开始。
  • vector&lt; pair&lt; int , pair&lt;int, int&gt; &gt; &gt; vp(n); 创建一个填充有n 默认初始化元素的向量。如果其中一个最终成为sort之后的第一个元素,我不会感到惊讶

标签: c++ stl c++14 stdvector push-back


【解决方案1】:

问题是

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

n 元素和push_back()添加 其他 n 元素初始化一个向量`。

在对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>

【讨论】:

  • 感谢您的帮助 ... 非常感谢,但我们总是在竞争激烈的编程竞赛中找到最快的方法和最少的单词(“我的意思是代码”)以使其适应时间和获得更多排名
  • @AmirHaytham - 这是因为我不喜欢竞争性编程。我喜欢好的程序,而不是快速开发的程序。
猜你喜欢
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多