En aquest exercici heu d’implementar una funció que rep un vector d’enters que cumpleix el següent. Qualsevol parella de valors consecutius d’aquest vector es troben a una distància menor o igual a 1. Però, a més, només hi ha exactament una parella de valors consecutius d’aquest vector que es troben a distància exactament 0, és a dir, que son iguals. Per exemple, la següent seqüencia de valors cumpleix aquesta condició:
3 2 1 2 3 4 3 3 2 1 2 3 4 5 6 5
La funció ha de retornar la posició (indexant des de 0) del primer element de la parella consecutiva que es troben a distància 0, és a dir, que son iguals. Amb l’exemple anterior com a entrada, la funció ha de retornar 6.
Aquesta és la capçalera:
// Pre: Sigui n la mida v.size(). Llavors, n>=2. // A més, per a cada i a {0..n-2}, es cumpleix |v[i]-v[i+1]|<=1. // A més, hi ha exactament un i a {0..n-2} que cumpleix |v[i]-v[i+1]|=0. // Post: La funció retorna el i particular a {0..n-2} que cumpleix |v[i]-v[i+1]|=0. int positionDistance0(const vector<int> &v);
Observació Només cal enviar el procediment demanat; el programa principal serà ignorat.
Observació
Avaluació sobre 10 punts:
Entenem com a solució ràpida una que és correcta, de cost logarítmic i capaç de superar els jocs de proves públics i privats. Entenem com a solució lenta una que no és ràpida, però és correcta i capaç de superar els jocs de proves públics.
positionDistance0([-1, 0, 0, 1]) = 1 positionDistance0([-1, 0, 0, 1, 0, 1, 0, 1, 2, 1]) = 1 positionDistance0([6, 5, 6, 6, 5, 6, 7, 6, 5]) = 2 positionDistance0([-9, -8, -7, -8, -9, -10, -9, -9]) = 6 positionDistance0([-3, -2, -2, -3, -2, -1, 0]) = 1 positionDistance0([0, 0, -1]) = 0 positionDistance0([5, 6, 5, 6, 5, 4, 4, 5, 4, 3, 2]) = 5 positionDistance0([-4, -5, -4, -5, -4, -5, -4, -3, -2, -3, -2, -2, -3, -2, -3, -2, -3, -4]) = 10 positionDistance0([-3, -3]) = 0 positionDistance0([4, 3, 2, 3, 4, 3, 4, 3, 2, 1, 0, 1, 0, 0, -1]) = 12 positionDistance0([4, 4, 5, 4, 3, 2, 3]) = 0 positionDistance0([10, 11, 10, 9, 8, 9, 8, 7, 7, 8, 9, 10, 9, 10, 9]) = 7 positionDistance0([-6, -5, -4, -3, -3, -2, -1, 0, 1, 0, 1, 2, 1]) = 3 positionDistance0([-2, -1, -1, -2, -3, -2]) = 1 positionDistance0([-7, -6, -7, -8, -9, -8, -9, -8, -9, -8, -9, -8, -9, -8, -8, -7, -6]) = 13 positionDistance0([-8, -9, -8, -9, -8, -9, -10, -11, -12, -13, -12, -13, -12, -11, -10, -9, -8, -8, -9]) = 16 positionDistance0([4, 3, 3, 4, 5, 4, 5, 4, 5, 6, 7]) = 1 positionDistance0([7, 6, 6]) = 1 positionDistance0([8, 9, 8, 7, 8, 9, 10, 10, 9, 8]) = 6 positionDistance0([6, 5, 4, 5, 6, 6, 7]) = 4