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