Cod sursa(job #1212545)

Utilizator vlad_DVlad Dumitriu vlad_D Data 25 iulie 2014 08:15:49
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <set>
#include <vector>
using namespace std;

int DX[3][2], DY[3][2];
int INF = 1000000000 + 7;
set<int> sx, sy; 
int N, M;
vector<int> px, py;
int v[10][10];

int main() {
  freopen("reuniune.in", "r", stdin);
  freopen("reuniune.out", "w", stdout);
  sx.insert(INF); sy.insert(INF);
  sx.insert(-INF); sy.insert(-INF);
  for (int i = 0; i < 3; ++i) {
    scanf("%d %d %d %d", &DX[i][0], &DY[i][0], &DX[i][1], &DY[i][1]);
    sx.insert(DX[i][0]);
    sx.insert(DX[i][1]);
    sy.insert(DY[i][0]);
    sy.insert(DY[i][1]);
  }
  px = vector<int>(sx.begin(), sx.end());
  py = vector<int>(sy.begin(), sy.end());
  N = px.size(); M = py.size();
  for (int i = 0; i + 1< N; ++i)
    for (int j = 0; j + 1 < M; ++j)
      for (int k = 0; k < 3; ++k)
        if (2LL * DX[k][0] < px[i] + px[i+1] && px[i] + px[i+1] < 2LL * DX[k][1])
        if (2LL * DY[k][0] < py[j] + py[j+1] && py[j] + py[j+1] < 2LL * DY[k][1]) v[i][j] = 1;
  long long A = 0, P = 0;
  for (int i = 0; i + 1 < N; ++i)
    for (int j = 0; j + 1 < M; ++j) if (v[i][j]) {
      long long w = px[i+1] - px[i];
      long long h = py[j+1] - py[j];
      A += w * h; 
      P += ((v[i-1][j] == 0) + (v[i+1][j] == 0)) * h; 
      P += ((v[i][j-1] == 0) + (v[i][j+1] == 0)) * w; 
    }
  printf("%lld %lld\n", A, P);
  return 0;
}