Pagini recente » Cod sursa (job #3178110) | Cod sursa (job #3184609) | Cod sursa (job #2755116) | Cod sursa (job #276994) | Cod sursa (job #3217975)
#include <fstream>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
const int NrDreptunghiuri = 3;
typedef long long ll;
struct punct{
ll x, y;
};
struct dreptunghi{
punct capat_st, capat_dr;
void citire(){
fin >> capat_st.x >> capat_st.y >> capat_dr.x >> capat_dr.y;
}
ll perimetru(){
if(capat_st.x > capat_dr.x || capat_st.y > capat_dr.y){
return 0;
}
return ((capat_dr.x - capat_st.x) + (capat_dr.y - capat_st.y)) * 2;
}
ll arie(){
if(capat_st.x > capat_dr.x || capat_st.y > capat_dr.y){
return 0;
}
return (capat_dr.x - capat_st.x) * (capat_dr.y - capat_st.y);
}
};
dreptunghi drept[NrDreptunghiuri];
dreptunghi intersect(dreptunghi a, dreptunghi b){
dreptunghi sol;
sol.capat_st.x = max(a.capat_st.x, b.capat_st.x);
sol.capat_st.y = max(a.capat_st.y, b.capat_st.y);
sol.capat_dr.x = min(a.capat_dr.x, b.capat_dr.x);
sol.capat_dr.y = min(a.capat_dr.y, b.capat_dr.y);
return sol;
}
int main(){
ll arie_reuniune, perimetru_reuniune;
for(int i = 0; i < NrDreptunghiuri; i++){
drept[i].citire();
}
arie_reuniune = drept[0].arie() + drept[1].arie() + drept[2].arie();
arie_reuniune -= intersect(drept[0], drept[1]).arie() + intersect(drept[1], drept[2]).arie() + intersect(drept[0], drept[2]).arie();
arie_reuniune += intersect(intersect(drept[0], drept[1]), drept[2]).arie();
perimetru_reuniune = drept[0].perimetru() + drept[1].perimetru() + drept[2].perimetru();
perimetru_reuniune -= intersect(drept[0], drept[1]).perimetru() + intersect(drept[1], drept[2]).perimetru() + intersect(drept[0], drept[2]).perimetru();
perimetru_reuniune += intersect(intersect(drept[0], drept[1]), drept[2]).perimetru();
fout << arie_reuniune << " " << perimetru_reuniune;
return 0;
}