CSES - Suorakulmiot

Tasossa on kolme suorakulmiota, joiden sivut ovat vaaka- ja pystyakselien suuntaisia. Tehtäväsi on laskea sen alueen pinta-ala, jota peittää vähintään yksi annetuista suorakulmioista.

Esimerkiksi seuraavassa kuvassa suorakulmioiden peittämän alueen pinta-ala on 16. Kuva vastaa koodipohjissa olevaa esimerkkiä.

Voit olettaa, että kaikki koordinaatit ovat kokonaislukuja välillä -10^9 \dots 10^9.

Huomaa, että on liian hidasta käydä läpi kaikki pisteet suorakulmioiden alueelta, vaan sinun tulee keksiä tehokkaampi matemaattinen ratkaisu.

Python

Toteuta funktio area(rec1, rec2, rec3), joka antaa kysytyn pinta-alan. Funktiolle annetaan kolme tuplea, joista jokainen määrittelee yhden suorakulmion. Jokaisessa tuplessa on neljä kokonaislukua x_1, y_1, x_2 ja y_2: suorakulmion vasen ylänurkka on (x_1,y_1) ja oikea alanurkka on (x_2,y_2).

Toteuta funktio tiedostoon rectangles.py.

def area(rec1, rec2, rec3):
    # TODO

if __name__ == "__main__":
    rec1 = (-1,1,1,-1)
    rec2 = (0,3,2,0)
    rec3 = (0,2,3,-2)
    print(area(rec1,rec2,rec3)) # 16

Java

Toteuta metodi area(rec1, rec2, rec3), joka antaa kysytyn pinta-alan. Metodille annetaan kolme taulukkoa, joista jokainen määrittelee yhden suorakulmion. Jokaisessa taulukossa on neljä kokonaislukua x_1, y_1, x_2 ja y_2: suorakulmion vasen ylänurkka on (x_1,y_1) ja oikea alanurkka on (x_2,y_2).

Toteuta metodi tiedostoon Rectangles.java.

public class Rectangles {
    public long area(int rec1[], int rec2[], int rec3[]) {
        // TODO
    }
    
    public static void main(String[] args) {
        Rectangles r = new Rectangles();
        int[] rec1 = {-1,1,1,-1};
        int[] rec2 = {0,3,2,0};
        int[] rec3 = {0,2,3,-2};
        System.out.println(r.area(rec1,rec2,rec3)); // 16
    }
}