#include #include #include /* Errori: Memoria: - malloc per array di interi con off-by-one (serve partire da 1 e lasciar vuota la posizione 0) - malloc per array di puntatori invece che int con sizeof sbagliata - jump non inizializzato (calloc invece di malloc) Logica: - loop infinito poiché manca decremento del contatore - off-by-one nel calcolo della colonna per le scale */ int *createJumps( int, int ); int main() { int r, c; scanf( "%d%d", &r, &c); int *jump = createJumps( r, c ); int n = r*c ; printf( "%d\n", n ); for ( int i = 1; i <= n; i++ ) printf( "%d ", jump[i] ); printf( "\n" ); return 0; } int *createJumps( int r, int c ){ int n = r * c; int *jump = calloc( n+1, sizeof(int) ); // BACO: n invece di n+1, malloc invece di calloc, size sbagliata; // lettura dei serpenti int s, mouth, tail; scanf( "%d", &s ); while ( s-- > 0) { // BACO: ciclo infinito scanf( "%d%d", &mouth, &tail ); jump[mouth] = tail; // BACO: invertiti mouth e tail } // lettura delle scale int l, start, len; scanf( "%d", &l ); for (int i = 0; i < l; i++ ) { scanf( "%d%d", &start, &len ); int row, col, end; row = r - 1 - (start-1)/c; col = (start-1) % c; if ( ( row + r ) % 2 == 0 ) // casella su riga crescente verso xx col = c - 1 - col; // BACO: off-by-one row = row - len + 1; end = c * ( r - row ); if ( ( row + r ) % 2 == 0 ) end -= col; else end += col - c + 1; jump[start] = end; } return jump; }