Cod sursa(job #1520579)

Utilizator cmirceaMircea C. cmircea Data 9 noiembrie 2015 02:03:42
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.75 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;

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

  return overlapx * overlapy;
}

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

  return 2 * (overlapx + overlapy);
}



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


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

  long long 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));


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

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

  long long perim1 = 2 * (xmax1 - xmin1 + ymax1 - ymin1);

  long long perim2 = 2 * (xmax2 - xmin2 + ymax2 - ymin2);
  long long perim3 = 2 * (xmax3 - xmin3 + ymax3 - ymin3);


  long long perim = perim1 + perim2 + perim3 - perim12 - perim23 - perim13 + perim34;
  long long 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;
}