Recinto quadrato#10556

Recinto quadrato (Editoriale)

Supponiamo che le coordinate dei rettangoli siano date come segue:

Consideriamo il rettangolo di dimensioni minime che copre completamente entrambi i rettangoli originali. Indichiamo i suoi angoli opposti come (minx, miny) e (maxx, maxy). Allora:

Le dimensioni del rettangolo di copertura sono uguali a:

Perché entrambi i rettangoli possano essere completamente coperti da un quadrato, il lato del quadrato deve essere non inferiore sia a length che a . Pertanto, la lunghezza del lato del pascolo quadrato minimo è uguale al massimo di queste due quantità:

side = max(length, width)

Esempio

Consideriamo due rettangoli originali:

Calcoliamo i confini del rettangolo risultante:

Le dimensioni del rettangolo di copertura sono uguali a:

La lunghezza del lato del quadrato di copertura sarà:

side = max(7, 3) = 7

Di conseguenza, l'area del quadrato di copertura minimo è uguale a 7^2 = 49.

Implementazione dell'algoritmo

Inizializziamo i confini del rettangolo di copertura. Poiché le coordinate si trovano nell'intervallo da a , possiamo impostare i valori iniziali come segue:

minx = 10; maxx = 0; miny = 10; maxy = 0;

Leggiamo le coordinate dei due rettangoli originali. Per ciascun rettangolo, aggiorniamo i confini del rettangolo di copertura.

for (i = 0; i < 2; i++)
{
  scanf("%d %d %d %d", &a1, &b1, &a2, &b2);
  if (a1 < minx) minx = a1;
  if (a2 > maxx) maxx = a2;
  if (b1 < miny) miny = b1;
  if (b2 > maxy) maxy = b2;
}

Calcoliamo la lunghezza e la larghezza del rettangolo di copertura.

l = maxx - minx;
w = maxy - miny;

Per coprire questo rettangolo con un quadrato, il lato del quadrato deve essere non inferiore sia alla sua lunghezza che alla sua larghezza. Pertanto, scegliamo la maggiore delle due quantità.

len = (l > w) ? l : w;

Calcoliamo l'area del quadrato e stampiamo la risposta.

area = len * len;
printf("%d\n", area);