Números consecutivos a distancia menor o igual a 2, solo dos consecutivos a distancia 1. X96493


Statement
 

pdf   zip   main.cc

thehtml

En este ejercicio hay que implementar una función que recibe un vector de enteros que cumple lo siguiente. Cualquier par de valores consecutivos del vector se encuentran a una distancia menor o igual a 2. Además, solo hay exactamente una pareja de valores consecutivos de este vector que se encuentren a distancia exactamente 1. Por ejemplo, la siguiente secuencia de valores cumple esta condifición:

3 1 1 2 4 2 2 0

La función tiene que devolver la posición (indexando desde 0) del primer elemento de la pareja consecutiva que se encuentre a distancia 1. Con el ejemplo anterior como entrada, la función tendría que retornar 2.

Esta es la cabecera:

// Pre: Sea n el tamaño, v.size(). Entonces, para cada i en {0..n-2}, se cumple que |v[i]-v[i+1]|<=2.
//      Además, hay exactamente una i en {0..n-2} que cumple |v[i]-v[i+1]|=1.
// Post: La función devuelve ese i en {0..n-2} que cumple |v[i]-v[i+1]|=1.
int positionDistance1(const vector<int> &v);

Observación Sólo tenéis que enviar el procedimiento requerido; el programa principal será ignorado.

Observación

Evaluación sobre 10 puntos:

  • Solución lenta: 5 puntos.
  • Solución rápida: 10 puntos.

Entendemos por solución rápida una que es correcta, de coste logarítmico y capaz de superar los juegos de pruebas públicos y privados. Entendemos una solución lenta una que no es rápida, pero es correcta y capaz de superar los juegos de pruebas públicos.

Sample session
positionDistance1([-1, -1, 0, 0]) = 1
positionDistance1([5, 5, 7, 7, 9, 9, 11, 10, 8, 6, 6, 6]) = 6
positionDistance1([2, 0, 2, 4, 6, 6, 6, 6, 8, 7, 5, 3]) = 8
positionDistance1([-9, -9, -9, -10, -12, -14]) = 2
positionDistance1([10, 10, 12, 14, 15]) = 3
positionDistance1([9, 9, 11, 13, 11, 13, 15, 15, 15, 16, 14, 16, 14, 16, 18, 18]) = 8
positionDistance1([4, 2, 0, -2, -4, -5, -7, -5, -3, -5]) = 4
positionDistance1([-7, -9, -7, -5, -6]) = 3
positionDistance1([-2, -2, -4, -6, -4, -6, -6, -6, -6, -8, -10, -8, -7, -7, -5, -5]) = 11
positionDistance1([4, 6, 7, 5, 5, 7, 7, 9, 11]) = 1
positionDistance1([10, 10, 12, 12, 10, 8, 8, 9, 11, 9, 11, 9]) = 6
positionDistance1([0, 2, 0, -2, -1, -1, 1, 3, 5, 5, 3, 5, 7]) = 3
positionDistance1([-7, -9, -9, -7, -7, -6, -8, -6, -4, -4, -2, -4, -4, -2]) = 4
positionDistance1([-8, -6, -6, -4, -4, -4, -2, -2, -4, -4, -2, 0, -2, -4, -2, -2, -4, -5, -5]) = 16
positionDistance1([3, 5, 7, 6]) = 2
positionDistance1([6, 7, 7]) = 0
positionDistance1([7, 9, 10]) = 1
positionDistance1([5, 7, 7, 8, 8, 10, 12, 14, 14, 14, 14, 12, 10, 8, 6, 8, 6, 8]) = 2
positionDistance1([-2, 0, 2, 2, 4, 4, 2, 3, 5, 7, 7, 5, 7, 5]) = 6
positionDistance1([5, 3, 2, 4, 6]) = 1
Information
Author
PRO1
Language
Spanish
Translator
Original language
Catalan
Other languages
Catalan English
Official solutions
C++
User solutions
C++