Pagini recente » Cod sursa (job #1583075) | Cod sursa (job #1719758) | Istoria paginii runda/sim02/clasament | Cod sursa (job #1653668) | Cod sursa (job #1471385)
//http://www.infoarena.ro/problema/Reuniune
#include <iostream>
#include <algorithm>
#include <list>
#include <fstream>
using namespace std;
class Dreptunghi {
public:
long long int x0, y0, x1, y1;
long long int dx, dy;
Dreptunghi(): x0(0), y0(0), x1(0), y1(0) {}
Dreptunghi(long long int x0, long long int y0, long long int x1, long long int y1): x0(x0), y0(y0), x1(x1), y1(y1) {}
long long int perimetru() {
return 2 * (x1 - x0 + y1 - y0);
}
long long int arie() {
return (x1 - x0) * (y1 - y0);
}
Dreptunghi intersectie(Dreptunghi o) {
Dreptunghi i;
i.x0 = max(o.x0, x0);
i.y0 = max(o.y0, y0);
i.x1 = min(o.x1, x1);
i.y1 = min(o.y1, y1);
if (i.x0 > i.x1 || i.y0 > i.y1)
i.x0 = i.x1 = i.y0 = i.y1 = 0;
return i;
}
friend ostream& operator<< (ostream &out, Dreptunghi &d) {
out << "(" << d.x0 << "," << d.y0 << "),(" << d.x1 << "," << d.y1 << ")";
return out;
}
};
void arie_perimetru(Dreptunghi d1, Dreptunghi d2, Dreptunghi d3,
long long int &arie, long long int &perimetru) {
Dreptunghi d12 = d1.intersectie(d2);
Dreptunghi d13 = d1.intersectie(d3);
Dreptunghi d23 = d2.intersectie(d3);
Dreptunghi d123 = d23.intersectie(d1);
arie = d1.arie() + d2.arie() + d3.arie() -
d12.arie() - d13.arie() - d23.arie() +
d123.arie();
perimetru = d1.perimetru() + d2.perimetru() + d3.perimetru() -
d12.perimetru() - d13.perimetru() - d23.perimetru() +
d123.perimetru();
}
int main() {
ifstream ifs("reuniune.in");
if (!ifs) {
cerr << "Err deschidere fisier" << endl;
exit(1);
}
long long int x0, x1, y0, y1;
long long int arie, perimetru;
Dreptunghi d1, d2, d3;
ifs >> d1.x0 >> d1.y0 >> d1.x1 >> d1.y1;
ifs >> d2.x0 >> d2.y0 >> d2.x1 >> d2.y1;
ifs >> d3.x0 >> d3.y0 >> d3.x1 >> d3.y1;
// caz cand nu se ating niciunul dintre ele, reuniunea e vida.
arie_perimetru(d1, d2, d3, arie, perimetru);
ofstream ofs("reuniune.out");
if (!ofs) {
cerr << "Err deschidere fisier" << endl;
exit(1);
}
ofs << arie << " " << perimetru;
return 0;
}