Chiedo un aiuto con fengshui. L’ho risolto attraverso lo spostamento all’interno di una matrice. Fin qui tutto ok, tranne per il fatto che l’ultimo testcase mi da output errato. Ho cercato una possibile soluzione al problema ma non l’ho trovata. Chiedo un aiutino.
Questo è il codice:
#include <iostream>
#include <fstream>
using namespace std;
int N;
int x_maggiore = 0, y_maggiore = 0;
int lato = 0;
int matrix[2000][2000];
int main()
{
ifstream in("input.txt");
ofstream out("output.txt");
in >> N;
for(int i = 0; i < N; i++)
{
int x, y;
in >> x >> y;
matrix[y][x] = 1;
if(x > x_maggiore)
x_maggiore = x;
if(y > y_maggiore)
y_maggiore = y;
}
for(int i = 0; i < y_maggiore; i++)
{
for(int j = 0; j <= x_maggiore; j++)
{
if(matrix[i][j] == 1)
{
for(int k = x_maggiore; k > 0; k--)
{
if(matrix[i][k] == 1)
{
// punto in alto a sinistra
int ax = j, ay = i;
// punto in alto a destra
int bx = k, by = i;
// punto in basso a destra
int cx = bx, cy = by + (bx - ax);
// punto in basso a sinistra
int dx = ax, dy = ay + (bx - ax);
if(dy > y_maggiore)
continue;
if(ax + (bx - ax) > x_maggiore)
continue;
if(matrix[cy][cx] == 1 && matrix[dy][dx] == 1)
if(bx-ax > lato)
lato = bx - ax;
break;
}
}
}
}
}
cout << lato;
}