Me refiero a este problema.
Este problema me da 92 puntos a excepción por el caso de prueba 7.
El caso de prueba no retornaba una salida incorrecta, sino que aparecía “Execution killed with signal 11” este es el mensaje comúnmente que intentaste hacer algo como array[-42].
Como ya lo habían resuelto varias personas pensé que el error estaba claramente en mi código.
Estuve mirándolo un largo rato y finalmente decidí empezar a cortar el problema hasta que la salida sea algo diferente.
Llegué a acortarlo tanto como esto, algo que estoy casi seguro que no debería fallar:
ifstream fin("yurumi.in");
int M, N, X;
fin >> M >> N >> X;
vector<vector<bool>> map = vector<vector<bool>>(M, vector<bool>(N, false));
int fil, col;
for (int i = 0; i < X; i++) {
fin >> fil >> col;
fil--;
col--;
map[fil][col] = true;
}
Resulta que si mandas este código al juez, en el caso de prueba 7 tira “Execution killed with signal 11”.
Si comentás la ante ultima línea, la salida es “A la superficie le falta 1992008”, que es esperable.
Despues pase a la fase voy a tirar todo por la ventana. Lo que hice fue cambiar esto:
vector<vector<bool>> map = vector<vector<bool>>(M + 1000, vector<bool>(N + 1000, false));
Le sumo 1000 de cada lado, y el error desaparece.
Por desgracia… si le sumo 1000 en mi programa real, el error no se va.
Al final hice un boundary check y obtuve 100 puntos:
fin >> fil >> col;
fil--;
col--;
if(fil < 0 || fil >= M)
continue;
if(col < 0 || col >= N)
continue;
map[fil][col] = true;
Acá hay algo raro
Despues por curiosidad me fui a fijar que habían hecho López y Lasorsa (crípticos sus códigos por cierto jaja) y ellos no tuvieron que realizar el checkeo, ni idea que pasó