Cod sursa(job #1520575)

Utilizator cmirceaMircea C. cmircea Data 9 noiembrie 2015 01:46:58
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.58 kb
#include <algorithm>
#include <cmath>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <string>
#include <sstream>
#include <stack>
#include <utility>
#include <vector>

using namespace std;

int area_intersect(int xmin1, int ymin1, int xmax1, int ymax1,
		   int xmin2, int ymin2, int xmax2, int ymax2)
{
  int overlapx = max(0, min(xmax1, xmax2) - max(xmin1, xmin2));
  int overlapy = max(0, min(ymax1, ymax2) - max(ymin1, ymin2));

  return overlapx * overlapy;
}

int perim_intersect(int xmin1, int ymin1, int xmax1, int ymax1,
		   int xmin2, int ymin2, int xmax2, int ymax2)
{
  int overlapx = max(0, min(xmax1, xmax2) - max(xmin1, xmin2));
  int overlapy = max(0, min(ymax1, ymax2) - max(ymin1, ymin2));

  return 2 * (overlapx + overlapy);
}



int main(int argc, char* argv[])
{
  ifstream fin("reuniune.in");


  int xmin1, xmax1, ymin1, ymax1;
  int xmin2, xmax2, ymin2, ymax2;
  int xmin3, xmax3, ymin3, ymax3;

  int xmin4, xmax4, ymin4, ymax4;

  if (fin.is_open())
  {
    fin >> xmin1 >> ymin1 >> xmax1 >> ymax1;
    fin >> xmin2 >> ymin2 >> xmax2 >> ymax2;
    fin >> xmin3 >> ymin3 >> xmax3 >> ymax3;

    fin.close();
  }

  xmin4 = max(xmin1, xmin2);
  xmax4 = max(xmin4, min(xmax1, xmax2));

  ymin4 = max(ymin1, ymin2);
  ymax4 = max(ymin4, min(ymax1, ymax2));

  int perim12 = perim_intersect(xmin1, ymin1, xmax1, ymax1, xmin2, ymin2, xmax2, ymax2);
  int perim23 = perim_intersect(xmin3, ymin3, xmax3, ymax3, xmin2, ymin2, xmax2, ymax2);
  int perim13 = perim_intersect(xmin1, ymin1, xmax1, ymax1, xmin3, ymin3, xmax3, ymax3);
  int perim34 = perim_intersect(xmin3, ymin3, xmax3, ymax3, xmin4, ymin4, xmax4, ymax4);

  int area12 = area_intersect(xmin1, ymin1, xmax1, ymax1, xmin2, ymin2, xmax2, ymax2);
  int area23 = area_intersect(xmin3, ymin3, xmax3, ymax3, xmin2, ymin2, xmax2, ymax2);
  int area13 = area_intersect(xmin1, ymin1, xmax1, ymax1, xmin3, ymin3, xmax3, ymax3);
  int area34 = area_intersect(xmin3, ymin3, xmax3, ymax3, xmin4, ymin4, xmax4, ymax4);

  int perim1 = 2 * (xmax1 - xmin1 + ymax1 - ymin1);
  int perim2 = 2 * (xmax2 - xmin2 + ymax2 - ymax1);
  int perim3 = 2 * (xmax3 - xmin3 + ymax3 - ymin3);
  int perim = 2 * (xmax1 - xmin1 + ymax1 - ymin1 + xmax2 - xmin2 + ymax2 - ymin2 + xmax3 - xmin3 + ymax3 - ymin3) - perim12 - perim23 - perim13 + perim34;
  int area = (xmax1 - xmin1) * (ymax1 - ymin1)  + (xmax2 - xmin2) * (ymax2 - ymin2) + (xmax3 - xmin3) * (ymax3 - ymin3) - area12 - area13 - area23 + area34;

  ofstream fout;
  fout.open("reuniune.out");
  fout << area << " "<< perim << endl;
  fout.close();
  return 0;
}