Ближайшие числа Хакерский ранг - два тестовых примера не пройдены при использовании кортежей - PullRequest
0 голосов
/ 09 апреля 2020

Ниже мой код, который я написал. Он успешно проходит 4 тестовых случая, но не проходит в двух тестовых случаях. Это хорошо известная проблема в хакерранке, но я до сих пор не могу понять, почему мой код не работает в этих двух тестах. Пожалуйста, помогите мне решить эту проблему. Ссылка на вопрос - https://www.hackerrank.com/challenges/closest-numbers/problem

#include <bits/stdc++.h>
using namespace std;


typedef tuple<int,int,int> tt;

bool sortbyasec(const tuple <int,int,int> &t1,const tuple <int,int,int> &t2)
{    
      return ((get<2>(t1) < get<2>(t2)) );    
}

int main()
{
    int TC;
    cin>>TC;
    vector <int> arr;

    for(int i = 0; i<TC; i++)
    {
       long long int x;
       cin>>x;

       arr.push_back(x);
   }


sort(arr.begin(),arr.end());
vector<tt> t1;
int diff;


for (size_t i = 0; i<arr.size()-1;i++)
{

    diff = abs(arr[i] - arr[i+1]);
    t1.push_back(tt(arr[i],arr[i+1],diff));
}
arr.clear();


sort(t1.begin(),t1.end(),sortbyasec);
long int value;
tie(ignore,ignore,value) = t1[0];



for (size_t i = 0; i < t1.size();i++)
{
    if (get<2>(t1[i]) == value)
    {

    cout<<get<0>(t1[i])<<' '<<get<1>(t1[i])<<' ';
    }
}

}

1 Ответ

0 голосов
/ 09 апреля 2020

Я прошел проверку на наличие проблем и обнаружил следующее: Если существует несколько пар, выведите их все в порядке возрастания

Так что ваш sortbyasec необходимо немного изменить следующим образом :

bool sortbyasec(const tuple <int,int,int> &t1,const tuple <int,int,int> &t2)
{    
      if ( get<2>(t1) == get<2>(t2))
      {
          return ((get<0>(t1) < get<0>(t2)));
      }
      return ((get<2>(t1) < get<2>(t2)) );    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...