ho fatto questo codice per il problema campo da calcio, fa bene i due casi test di esempio ma poi fa solo uno o due casi di test (alle volte 0).
Qualcuno sa aiutarmi?
#include <iostream>
#include <vector>
using namespace std;
constexpr int NMAX = 7002;
int foresta[NMAX][NMAX];
int prefix[NMAX][NMAX];
void solve(int t) {
    int N, M, K, A, B;
    cin >> N >> M >> K >> A >> B;
    int x,y;
    for (int i = 0; i < K; i++) {
        cin >> x >> y;
        foresta[x][y]++;
    }
    for (int i=1; i<=N; i++) {
        for (int j=1; j<=M; j++) {
            prefix[i][j] = prefix[i-1][j]+prefix[i][j-1]-prefix[i-1][j-1]+foresta[i-1][j-1];
        }
    }
    
    int risposta = 1e9;
    int tmp;
    for (int i=0; i<=N; i++) {
        for (int j=0; j<=M; j++) {
            if (i+A <= N && j+B <= M) {
                tmp = prefix[i+A][j+B] - prefix[i][B] - prefix[A][j] + prefix[i][j];
                if (tmp < risposta) risposta = tmp;
            }
        }
    }
    
    cout << "Case #" << t << ": " << risposta << "\n";
}
int main() {
    // se preferisci leggere e scrivere da file
    // ti basta decommentare le seguenti due righe:
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int T;
    cin >> T;
    for (int t = 1; t <= T; t++) {
        solve(t);
    }
    return 0;
}