import java.util.*;
import java.io.*;
import java.lang.*;
public class calcio {
public int solve(int N, int M, int K, int A, int B, int[] X, int[] Y) {
int [][] foresta = new int [N] [M];
ArrayList<Integer> alberi = new ArrayList<>();
for (int i = 0; i < X.length; i++) {
foresta[X[i]][Y[i]] += 1;
}
int b = N-A;
while (b>=0) {
int a = M-B;
while (a >= 0) {
int c = 0;
for (int i = 0+b; i < A+b; i++) {
for (int j = 0+a; j < B+a; j++) {
c += foresta[i][j];
}
}
alberi.add(c);
a--;
}
b--;
}
int r = alberi.get(0);
for (Integer i : alberi) {
if (i<r){
r = i;
}
}
int risposta = r;
return risposta;
}
public static void main(String[] args) throws FileNotFoundException, IOException {
// se preferisci leggere e scrivere da file
// ti basta modificare la seguente variabile
boolean input_from_file = true;
InputStream fin;
OutputStream fout;
if(input_from_file) {
fin = new FileInputStream("input.txt");
fout = new FileOutputStream("output.txt");
} else {
fin = System.in;
fout = System.out;
}
Scanner scn = new Scanner(fin);
PrintStream prnt = new PrintStream(fout);
int T = scn.nextInt();
for(int t = 1; t <= T; t++) {
int N = scn.nextInt();
int M = scn.nextInt();
int K = scn.nextInt();
int A = scn.nextInt();
int B = scn.nextInt();
int[] X = new int[K];
int[] Y = new int[K];
for (int i = 0; i < K; i++) {
X[i] = scn.nextInt();
Y[i] = scn.nextInt();
}
calcio solver = new calcio();
int risposta = solver.solve(N, M, K, A, B, X, Y);
prnt.format("Case #%d: %d\n", t, risposta);
fout.flush();
}
}
}
Ciao a tutti, vorrei sapere come potrei fare a velocizzare l’esecuzione del codice, perché alla fine la matrice diventerebbe di 7000^2 ed anche se il codice è corretto dopo il sesto test case non riesco più ad andare avanti per i dati molto grandi.
Grazie mille a tutti in anticipo
Questo è il testo e l’obiettivo del problema: