En aquest exercici us donem un programa que heu de completar. Al principi del programa es defineix un struct Point, que defineix un punt sobre el pla 2D amb coordenades enteres. El programa principal llegeix varis casos d’entrada. Cada cas consisteix en la descripció d’una llista de punts. Per a cada cas, el programa principal crida a una funció anomenada compute que és l’única que heu d’implementar (no heu de canviar res més). La funció compute rep la llista de punts com a paràmetre, i també rep un paràmetre enter distance, i retorna el nombre de parelles de punts que apareixen consecutivament a la llista, i tals que la distància (eucliciana) entre ells és menor o igual a distance.
Aquest és el codi que heu de completar:
#include <iostream> #include <string> #include <vector> using namespace std; struct Point { int x, y; }; typedef vector<Point> VPoint; // Afegiu funcions auxiliars si voleu. // ... // Pre: v conté com a mínim un punt. // d >= 1 // Post: Retorna el nombre de parelles de punts que apareixen consecutivament a v, // i tals que la distància entre ells és menor o igual a d. int compute(VPoint &v, int distance) { // Implementeu aquesta funció. // ... } int main() { int n, d; while (cin >> n >> d) { VPoint v(n); for (int i = 0; i < n; i++) cin >> v[i].x >> v[i].y; cout << compute(v, d) << endl; } }
Entrada
L’entrada té varis casos. Cada cas comença amb dos naturals positius n,distance majors o iguals a 1 en una primera línia. En una segona línia hi ha la descripció d’una llista d’n punts, amb les seves dues coordenades x,y (enteres). De fet, no us heu de preocupar massa per com son aquestes entrades perquè el programa que us donem ja té la part de lectura implementada. Només us heu de preocupar d’implementar la funció compute abans esmentada.
Sortida
Per a cada cas, el programa ha d’escriure en una nova línia el corresponent nombre de parelles de punts consecutius a la llista tals que la distància entre ells és menor o igual a distance.De fet, no us heu de preocupar massa per com son aquestes sortides perquè el programa que us donem ja té la part d’escriptura implementada. Només us heu de preocupar d’implementar la funció compute abans esmentada.
Observació
Avaluació sobre 10 punts:
Entenem com a solució ràpida una que és correcta, de cost lineal 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.
Input
5 4 10 6 2 1 4 0 6 3 1 8 5 1 5 3 7 4 9 10 2 0 10 8 5 20 0 4 6 0 10 3 10 10 7 10 10 5 7 -1 -9 -3 6 6 5 8 2 4 10 0 10 -8 -8 5 7 9 -3 -2 10 10 -1 1 1 -9 0 -1 -4 1 2 7 -5 9 8 0 4 2 -7 -1 -7 7 8 66 -56 -35 11 -5 78 41 -100 -44 -95 -37 8 -38 7 -81 -73 -70 17 66 -28 -18 21 30 -82 5 16 -34 -3 40 30 -32 35 94 13 50 -46 -93 -23 96 58 -17 51 -79 91 63 28 60 41 8 -99 -88 91 -28 16 66 59 27 59 75 -77 -52 -46 -8 33 -53 55 -17 -48 62 10 -53 -31 94 98 -10 84 61 69 44 -49 -74 -5 -87 67 17 6 25 20 66 -36 -50 -83 12 4 9 96 52 -87 -22 54 25 88 -100 95 31 48 -16 15 -42 -98 -92 9 -71 -47 23 96 70 -72 -29 -87 -58 21 82 4 -76 -10 -1 26 4 5 66 -21 -72 -35 -71 73 96 78 -93 -40 86 10 66 -82 -5 89 -29 68 35 -59 46 -95 -96 88 -24 86 -59 -50 -74 -9 77 -20 68 5 66 -42 83 86 -69 79 13 -62 89 -2 98 7 66 43 87 -72 10 21 -31 -45 -24 -76 93 52 -91 85 -99 7 66 -25 28 -35 93 -16 -26 76 -31 5 4 32 -7 -8 -71 20 66 -51 73 -74 -22 -68 47 -3 -12 73 21 -70 24 31 -86 -24 -34 -61 54 32 -68 -63 -95 58 -44 -40 -39 88 53 53 68 93 53 -10 -81 -70 22 16 27 60 -61 10 66 91 13 29 55 89 95 45 -7 -24 27 -20 -69 -16 37 -9 45 -26 94 -53 92 8 66 100 -19 6 80 54 72 7 13 -90 5 -47 24 -67 -92 -38 78 6 66 55 -96 -21 -65 -65 13 22 -23 -43 46 -80 -46 20 66 57 -46 69 -38 84 22 85 -10 -65 95 45 -12 18 28 -54 81 6 49 -15 10 78 -30 -5 -10 92 72 -3 -12 43 52 -75 -1 56 44 12 39 -34 -4 80 -49 9 66 24 -11 59 -48 36 -11 8 -16 24 68 -38 95 -38 2 86 85 100 -27 4 66 51 -52 76 -44 93 -13 95 -92 17 66 24 -41 74 -52 48 32 -50 -67 71 58 -32 -6 25 -20 -12 37 82 -76 21 81 -53 -53 -19 -4 -77 37 -62 -40 -18 97 94 -95 -45 67 16 66 53 -52 -47 87 -82 61 -96 -38 -15 -16 51 -78 -35 25 -7 97 72 41 -23 -83 14 65 -45 74 97 -49 17 52 -44 -17 56 -91 18 66 59 46 -1 20 50 62 55 -67 -38 77 -52 87 -30 -56 58 61 -28 76 -26 87 81 98 83 83 15 34 89 48 -61 48 -71 99 -7 -22 -32 93 18 66 -78 76 -99 50 75 88 70 -82 -4 -20 -60 -79 4 -74 52 1 59 -16 66 -57 -27 -36 -18 -80 -7 -70 -36 21 -2 -94 -39 -29 83 -38 71 57 19 66 40 25 -4 -81 66 17 23 42 -82 74 -49 3 40 -6 76 -97 26 46 -54 57 -91 17 -96 -84 78 -75 49 -60 96 -45 -60 -15 80 36 -46 -5 -98 27 18 66 71 1 -62 -27 91 -18 99 44 -93 -5 40 14 4 -44 19 -30 -66 -6 69 -76 -10 -77 -36 25 54 50 80 -52 2 6 86 -28 57 -77 -4 47 4 66 -56 -60 -37 39 80 77 94 87 17 66 -87 71 40 83 95 -71 56 -92 4 9 8 -17 8 60 90 -7 82 -4 -33 -23 -57 22 22 -67 85 -90 -87 62 -97 100 -94 -83 20 46 18 66 14 25 55 -28 -71 -86 80 -38 22 -11 -99 65 -30 -2 -69 -2 41 54 70 74 -12 80 37 100 84 -14 -94 -100 -95 2 50 -31 78 -46 41 57 6 66 -30 -82 40 59 -80 5 -71 18 -14 27 -92 90 18 66 32 -22 -75 -31 -23 -92 5 -67 59 11 -14 -42 30 -37 13 -29 -81 31 41 -63 -79 -50 -93 -24 -71 25 62 56 33 52 -99 -85 80 -74 -16 -94 13 66 39 -60 44 100 26 -98 30 39 -35 -100 8 46 -9 45 67 -9 53 -58 20 -73 55 -25 11 6 -74 26 19 66 -47 60 -9 -62 -2 -19 32 -2 57 -16 -73 -55 -1 78 53 -55 -82 -2 62 10 -100 55 -71 -73 9 -45 -12 65 -19 -87 100 -16 73 -60 -28 -29 -28 -96 8 66 -72 -12 46 -26 88 -27 77 83 -9 -26 -6 -100 -76 -52 -70 -98 2 66 -15 -10 -29 16 3 66 -80 -100 -74 -39 -28 -3 3 66 -24 -85 11 15 11 35 7 66 84 12 85 -25 36 -22 -75 11 27 -45 13 84 -10 53 3 66 -94 -94 -75 57 -67 -64 6 66 30 19 -45 -4 -70 20 57 15 72 41 77 56 20 66 13 -67 91 74 10 97 -14 -6 -64 89 -1 93 96 -26 49 -72 11 28 8 -71 83 54 -91 2 11 -25 -77 -99 -49 29 67 14 62 7 -13 -78 -47 23 -34 -10 20 66 15 -18 7 89 82 35 -51 9 93 -71 -9 47 -62 43 -43 -37 16 -42 15 -56 75 79 -95 -69 -34 78 -15 89 -57 25 -50 58 57 57 -3 38 -59 46 -54 -66 15 66 -13 31 64 80 88 -74 -5 96 -9 39 20 -30 -5 1 -14 -28 86 -26 -34 -40 -25 74 -83 -69 -30 55 -77 67 52 -93 12 66 -62 38 4 69 25 -19 -37 -30 72 -98 90 -59 -53 -60 -23 19 -74 2 35 -64 77 9 -47 58
Output
2 0 4 2 6 2 4 6 3 1 2 1 1 2 2 3 2 0 7 3 2 3 2 5 6 5 3 1 5 5 2 6 5 4 2 1 2 1 3 0 3 4 7 4 3