21 / 24
Oct 2019

Niestety nie posiadam profilu na ideone. Mogę go jedynie wkleić jako zwykły tekst.

Najprawdopodobniej sędzia nie uwzględnia sytuacji gdy współrzędne x jednego prostokąta częściowo pokrywają się z x drugiego prostokąta a y są takie same (pierwszy przypadek) oraz gdy prostokąty częściowo na siebie nachodzą, ale dolne wierzchołki obu prostokątów są takie same (drugi przypadek) .

Założenie profilu na ideone to 3 minuty roboty, ostatecznie podaj go wprost, ale pamiętaj żeby był kompletny i by było zachowane formatowanie ze wszystkimi odstępami i wcięciami. Nikomu nie będzie się chciało czytać niedbale podany kod. Jest tu zresztą opcja na wklejanie kodu. To </>

Ok.
To jest algorytm który podaje 16 zamiast 24 z pierwszego przypadku:

#include<iostream>

using namespace std;

int main() {

    unsigned short xl1, yl1, xr1, yr1, xl2, yl2, xr2, yr2;
    cin >> xl1 >> yl1 >> xr1 >> yr1 >> xl2 >> yl2 >> xr2 >> yr2;
    if (xr1 <= xl2 || xr2 <= xl1 || yr1 <= yl2 || yr2 <= yl1)
        cout << (xr1 - xl1)*(yr1 - yl1) + (xr2 - xl2)*(yr2 - yl2);
    else if ((xr1 < xr2 && yr1 > yr2) || (xr1 > xr2 && yr1 < yr2) || (xl2 < xl1 && yl2 > yl1) || (xl2 > xl1 && yl2 < yl1)) {
        int commx, commy;
        commx = xr1 > xr2 ? xr2 - xl1 : xr1 - xl2;
        commy = yr1 > yr2 ? yr2 - yl1 : yr1 - yl2;
        cout << (xr1 - xl1)*(yr1 - yl1) + (xr2 - xl2)*(yr2 - yl2) - commx * commy;
    }
    else {
        if ((xr1 - xl1)*(yr1 - yl1) > (xr2 - xl2)*(yr2 - yl2)) cout << (xr1 - xl1)*(yr1 - yl1);
        else cout << (xr2 - xl2)*(yr2 - yl2);
    }
    return 0;
}

a to drugi algorytm który podaje 81 zamiast 101:

#include<iostream>

using namespace std;

int main()
{
  unsigned short x1,y1,x2,y2,x3,y3,x4,y4;
  unsigned int area,shx,shy;
  cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
  if (x2<=x3 || x4<=x1 || y2<=y3 || y4<=y1) cout<<(x2-x1)*(y2-y1)+(x4-x3)*(y4-y3);
  else if ((x2<x4 && x1<x3) || (x1>x3 && x2>x4) || (y2<y4 && y1<y3) || (y1>y3 && y2>y4)){
    area=(x2-x1)*(y2-y1)+(x4-x3)*(y4-y3);
    if (x2<x4 && x1<x3) shx=x2-x3;
    else if (x1>x3 && x2>x4) shx= x4-x1;
    else shx=x2-x1;
    if (y2<y4 && y1<y3) shy = y2-y3;
    else if (y1>y3 && y2>y4) shy = y4-y1;
    else shy = y2-y1;
    cout<<area-shx*shy;
  }
  else{
    if ((x2-x1)*(y2-y1)>(x4-x3)*(y4-y3)) cout<<(x2-x1)*(y2-y1);
    else cout<<(x4-x3)*(y4-y3);
  }
  return 0;
}

Dla obu sędzia zwraca AC.

Pozdrawiam

Możliwe, ale z drugiej strony to nie SPOJ, czy sędzia jest błędny tylko po prostu twój kod jest błędny i w pierwszym rzędzie to Ty powinieneś poprawić swój kod. To, że dostajesz mimo tego AC, to faktycznie brak takich tetsów.

Niestety w zasadzie tylko autor mógłby dodać dodatkowe testy, ale możliwe, że już dawno nie jest tu aktywny. Ja ani nie jestem w stanie tego zrobić ani nie jestetm nawet tym specjalnie zaintertesowany. Mój program, podobnie jak @korkirw, daje w obu twoich testach poprawne odpowiedzi.